SUBSTRING SQL function


1. Usage of SUBSTRING to add - in between product name.

SQL Server Query 1

            
SELECT  
ProductName,
-- Basic replacement: Change 'Chef' to 'Cook'
REPLACE(ProductName, 'Chef', 'Cook') AS ReplacedChef,
-- Case-insensitive replacement (more complex using nested REPLACE)
REPLACE(REPLACE(REPLACE(LOWER(ProductName), 'chef', '#TEMP#'), 'cook', 'chef'), '#TEMP#', 'cook') AS ReplacedChefCaseInsensitive,
-- Replacing multiple different substrings
REPLACE(REPLACE(ProductName, 'Sauce', 'Dressing'), 'Syrup', 'Topping') AS ReplacedSauceSyrup,
-- Replacing based on position (more complex using SUBSTRING and concatenation)
CASE
WHEN CHARINDEX(' ', ProductName) > 0 THEN
LEFT(ProductName, CHARINDEX(' ', ProductName) - 1) +
' - Updated' +
SUBSTRING(ProductName, CHARINDEX(' ', ProductName), LEN(ProductName))
ELSE
ProductName + ' - Updated'
END AS ReplacedAfterFirstSpace,
-- Removing specific characters (replacing with empty string)
REPLACE(ProductName, '''', '') AS RemovedApostrophe
FROM
Products
WHERE
ProductName LIKE '%Chef%' OR
ProductName LIKE '%Sauce%' OR
ProductName LIKE '%Syrup%' OR
ProductName LIKE '% %' OR
ProductName LIKE '%''%';

Create SQL query with SqlQueryBuilder 1

            
var (sql1, parameters1) = new SqlQueryBuilder()  
.Select()
.Column("ProductName", "ProductName")
.Column(new REPLACE(new Column("ProductName"), "Chef", "Cook"), "ReplacedChef")
.Column(new REPLACE(new REPLACE(new REPLACE(new LOWER(new Column("ProductName")), "chef", "#TEMP#"), "cook", "chef"), "#TEMP#", "cook"), "ReplacedChefCaseInsensitive")
.Column(new REPLACE(new REPLACE(new Column("ProductName"), "Sauce", "Dressing"), "Syrup", "Topping"), "ReplacedSauceSyrup")
.Column(new CASE()
.When(new CHARINDEX(" ", new Column("ProductName")).GreaterThan(0))
.Then(new CONCAT(
new LEFT(new Column("ProductName"), new CHARINDEX(" ", new Column("ProductName")).AddArithmatic(new Arithmatic().Subtract(1))),
" - Updated",
new SUBSTRING(new Column("ProductName"), new CHARINDEX(" ", new Column("ProductName")), new LEN(new Column("ProductName")))
))
.Else(new CONCAT(new Column("ProductName"), " - Updated"))
, "ReplacedAfterFirstSpace")
.Column(new REPLACE(new Column("ProductName"), "'", ""), "RemovedApostrophe")
.From("Products")
.Where(new Where(new LIKE(new Column("ProductName"), "%Chef%"))
.OR(new LIKE(new Column("ProductName"), "%Sauce%"))
.OR(new LIKE(new Column("ProductName"), "%Syrup%"))
.OR(new LIKE(new Column("ProductName"), "% %"))
.OR(new LIKE(new Column("ProductName"), "%''%"))
)
.Build();

Query build by SqlQueryBuilder 1

            
SELECT ProductName AS ProductName,
       REPLACE(ProductName, @pMAIN_2507192019007391020, @pMAIN_2507192019007391021) AS ReplacedChef,
       REPLACE(REPLACE(REPLACE(LOWER(ProductName), @pMAIN_2507192019007391022, @pMAIN_2507192019007391023), @pMAIN_2507192019007391024, @pMAIN_2507192019007391025), @pMAIN_2507192019007391026, @pMAIN_2507192019007391027) AS ReplacedChefCaseInsensitive,
       REPLACE(REPLACE(ProductName, @pMAIN_2507192019007391028, @pMAIN_2507192019007391029), @pMAIN_250719201900739102_10, @pMAIN_250719201900739102_11) AS ReplacedSauceSyrup,
       CASE WHEN CHARINDEX(@pMAIN_250719201900739102_12, ProductName, 1) > @pMAIN_250719201900739102_13 THEN CONCAT(LEFT(ProductName, CHARINDEX(@pMAIN_250719201900739102_14, ProductName, 1) - @pMAIN_250719201900739102_15), @pMAIN_250719201900739102_16, SUBSTRING(ProductName, CHARINDEX(@pMAIN_250719201900739102_17, ProductName, 1), LEN(ProductName))) ELSE CONCAT(ProductName, @pMAIN_250719201900739102_18) END AS ReplacedAfterFirstSpace,
       REPLACE(ProductName, @pMAIN_250719201900739102_19, @pMAIN_250719201900739102_20) AS RemovedApostrophe
FROM Products
WHERE ProductName LIKE @pMAIN_250719201900739102_21
      OR ProductName LIKE @pMAIN_250719201900739102_22
      OR ProductName LIKE @pMAIN_250719201900739102_23
      OR ProductName LIKE @pMAIN_250719201900739102_24
      OR ProductName LIKE @pMAIN_250719201900739102_25;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192019007391020 Chef
@pMAIN_2507192019007391021 Cook
@pMAIN_2507192019007391022 chef
@pMAIN_2507192019007391023 #TEMP#
@pMAIN_2507192019007391024 cook
@pMAIN_2507192019007391025 chef
@pMAIN_2507192019007391026 #TEMP#
@pMAIN_2507192019007391027 cook
@pMAIN_2507192019007391028 Sauce
@pMAIN_2507192019007391029 Dressing
@pMAIN_250719201900739102_10 Syrup
@pMAIN_250719201900739102_11 Topping
@pMAIN_250719201900739102_12
@pMAIN_250719201900739102_13 0
@pMAIN_250719201900739102_14
@pMAIN_250719201900739102_15 1
@pMAIN_250719201900739102_16 - Updated
@pMAIN_250719201900739102_17
@pMAIN_250719201900739102_18 - Updated
@pMAIN_250719201900739102_19 '
@pMAIN_250719201900739102_20
@pMAIN_250719201900739102_21 %Chef%
@pMAIN_250719201900739102_22 %Sauce%
@pMAIN_250719201900739102_23 %Syrup%
@pMAIN_250719201900739102_24 % %
@pMAIN_250719201900739102_25 %''%

Query Results 1:

  ProductName ReplacedChef ReplacedChefCaseInsensitive ReplacedSauceSyrup ReplacedAfterFirstSpace RemovedApostrophe
1 Alice Mutton Alice Mutton alice mutton Alice Mutton Alice - Updated Mutton Alice Mutton
2 Aniseed Syrup Aniseed Syrup aniseed syrup Aniseed Topping Aniseed - Updated Syrup Aniseed Syrup
3 Boston Crab Meat Boston Crab Meat boston crab meat Boston Crab Meat Boston - Updated Crab Meat Boston Crab Meat
4 Camembert Pierrot Camembert Pierrot camembert pierrot Camembert Pierrot Camembert - Updated Pierrot Camembert Pierrot
5 Carnarvon Tigers Carnarvon Tigers carnarvon tigers Carnarvon Tigers Carnarvon - Updated Tigers Carnarvon Tigers
6 Chartreuse verte Chartreuse verte chartreuse verte Chartreuse verte Chartreuse - Updated verte Chartreuse verte
7 Chef Anton's Cajun Seasoning Cook Anton's Cajun Seasoning cook anton's cajun seasoning Chef Anton's Cajun Seasoning Chef - Updated Anton's Cajun Seasoning Chef Antons Cajun Seasoning
8 Chef Anton's Gumbo Mix Cook Anton's Gumbo Mix cook anton's gumbo mix Chef Anton's Gumbo Mix Chef - Updated Anton's Gumbo Mix Chef Antons Gumbo Mix
9 Côte de Blaye Côte de Blaye côte de blaye Côte de Blaye Côte - Updated de Blaye Côte de Blaye
10 Escargots de Bourgogne Escargots de Bourgogne escargots de bourgogne Escargots de Bourgogne Escargots - Updated de Bourgogne Escargots de Bourgogne
11 Filo Mix Filo Mix filo mix Filo Mix Filo - Updated Mix Filo Mix
12 Genen Shouyu Genen Shouyu genen shouyu Genen Shouyu Genen - Updated Shouyu Genen Shouyu
13 Gnocchi di nonna Alice Gnocchi di nonna Alice gnocchi di nonna alice Gnocchi di nonna Alice Gnocchi - Updated di nonna Alice Gnocchi di nonna Alice
14 Gorgonzola Telino Gorgonzola Telino gorgonzola telino Gorgonzola Telino Gorgonzola - Updated Telino Gorgonzola Telino
15 Grandma's Boysenberry Spread Grandma's Boysenberry Spread grandma's boysenberry spread Grandma's Boysenberry Spread Grandma's - Updated Boysenberry Spread Grandmas Boysenberry Spread
16 Gravad lax Gravad lax gravad lax Gravad lax Gravad - Updated lax Gravad lax
17 Guaraná Fantástica Guaraná Fantástica guaraná fantástica Guaraná Fantástica Guaraná - Updated Fantástica Guaraná Fantástica
18 Gula Malacca Gula Malacca gula malacca Gula Malacca Gula - Updated Malacca Gula Malacca
19 Gumbär Gummibärchen Gumbär Gummibärchen gumbär gummibärchen Gumbär Gummibärchen Gumbär - Updated Gummibärchen Gumbär Gummibärchen
20 Gustaf's Knäckebröd Gustaf's Knäckebröd gustaf's knäckebröd Gustaf's Knäckebröd Gustaf's - Updated Knäckebröd Gustafs Knäckebröd
21 Inlagd Sill Inlagd Sill inlagd sill Inlagd Sill Inlagd - Updated Sill Inlagd Sill
22 Ipoh Coffee Ipoh Coffee ipoh coffee Ipoh Coffee Ipoh - Updated Coffee Ipoh Coffee
23 Jack's New England Clam Chowder Jack's New England Clam Chowder jack's new england clam chowder Jack's New England Clam Chowder Jack's - Updated New England Clam Chowder Jacks New England Clam Chowder
24 Laughing Lumberjack Lager Laughing Lumberjack Lager laughing lumberjack lager Laughing Lumberjack Lager Laughing - Updated Lumberjack Lager Laughing Lumberjack Lager
25 Longlife Tofu Longlife Tofu longlife tofu Longlife Tofu Longlife - Updated Tofu Longlife Tofu
26 Louisiana Fiery Hot Pepper Sauce Louisiana Fiery Hot Pepper Sauce louisiana fiery hot pepper sauce Louisiana Fiery Hot Pepper Dressing Louisiana - Updated Fiery Hot Pepper Sauce Louisiana Fiery Hot Pepper Sauce
27 Louisiana Hot Spiced Okra Louisiana Hot Spiced Okra louisiana hot spiced okra Louisiana Hot Spiced Okra Louisiana - Updated Hot Spiced Okra Louisiana Hot Spiced Okra
28 Manjimup Dried Apples Manjimup Dried Apples manjimup dried apples Manjimup Dried Apples Manjimup - Updated Dried Apples Manjimup Dried Apples
29 Mascarpone Fabioli Mascarpone Fabioli mascarpone fabioli Mascarpone Fabioli Mascarpone - Updated Fabioli Mascarpone Fabioli
30 Mishi Kobe Niku Mishi Kobe Niku mishi kobe niku Mishi Kobe Niku Mishi - Updated Kobe Niku Mishi Kobe Niku
31 Mozzarella di Giovanni Mozzarella di Giovanni mozzarella di giovanni Mozzarella di Giovanni Mozzarella - Updated di Giovanni Mozzarella di Giovanni
32 Nord-Ost Matjeshering Nord-Ost Matjeshering nord-ost matjeshering Nord-Ost Matjeshering Nord-Ost - Updated Matjeshering Nord-Ost Matjeshering
33 Northwoods Cranberry Sauce Northwoods Cranberry Sauce northwoods cranberry sauce Northwoods Cranberry Dressing Northwoods - Updated Cranberry Sauce Northwoods Cranberry Sauce
34 NuNuCa Nuß-Nougat-Creme NuNuCa Nuß-Nougat-Creme nunuca nuß-nougat-creme NuNuCa Nuß-Nougat-Creme NuNuCa - Updated Nuß-Nougat-Creme NuNuCa Nuß-Nougat-Creme
35 Original Frankfurter grüne Soße Original Frankfurter grüne Soße original frankfurter grüne soße Original Frankfurter grüne Soße Original - Updated Frankfurter grüne Soße Original Frankfurter grüne Soße
36 Outback Lager Outback Lager outback lager Outback Lager Outback - Updated Lager Outback Lager
37 Pâté chinois Pâté chinois pâté chinois Pâté chinois Pâté - Updated chinois Pâté chinois
38 Perth Pasties Perth Pasties perth pasties Perth Pasties Perth - Updated Pasties Perth Pasties
39 Queso Cabrales Queso Cabrales queso cabrales Queso Cabrales Queso - Updated Cabrales Queso Cabrales
40 Queso Manchego La Pastora Queso Manchego La Pastora queso manchego la pastora Queso Manchego La Pastora Queso - Updated Manchego La Pastora Queso Manchego La Pastora
41 Raclette Courdavault Raclette Courdavault raclette courdavault Raclette Courdavault Raclette - Updated Courdavault Raclette Courdavault
42 Ravioli Angelo Ravioli Angelo ravioli angelo Ravioli Angelo Ravioli - Updated Angelo Ravioli Angelo
43 Rhönbräu Klosterbier Rhönbräu Klosterbier rhönbräu klosterbier Rhönbräu Klosterbier Rhönbräu - Updated Klosterbier Rhönbräu Klosterbier
44 Röd Kaviar Röd Kaviar röd kaviar Röd Kaviar Röd - Updated Kaviar Röd Kaviar
45 Rogede sild Rogede sild rogede sild Rogede sild Rogede - Updated sild Rogede sild
46 Rössle Sauerkraut Rössle Sauerkraut rössle sauerkraut Rössle Sauerkraut Rössle - Updated Sauerkraut Rössle Sauerkraut
47 Sasquatch Ale Sasquatch Ale sasquatch ale Sasquatch Ale Sasquatch - Updated Ale Sasquatch Ale
48 Schoggi Schokolade Schoggi Schokolade schoggi schokolade Schoggi Schokolade Schoggi - Updated Schokolade Schoggi Schokolade
49 Scottish Longbreads Scottish Longbreads scottish longbreads Scottish Longbreads Scottish - Updated Longbreads Scottish Longbreads
50 Singaporean Hokkien Fried Mee Singaporean Hokkien Fried Mee singaporean hokkien fried mee Singaporean Hokkien Fried Mee Singaporean - Updated Hokkien Fried Mee Singaporean Hokkien Fried Mee
51 Sir Rodney's Marmalade Sir Rodney's Marmalade sir rodney's marmalade Sir Rodney's Marmalade Sir - Updated Rodney's Marmalade Sir Rodneys Marmalade
52 Sir Rodney's Scones Sir Rodney's Scones sir rodney's scones Sir Rodney's Scones Sir - Updated Rodney's Scones Sir Rodneys Scones
53 Sirop d'érable Sirop d'érable sirop d'érable Sirop d'érable Sirop - Updated d'érable Sirop dérable
54 Steeleye Stout Steeleye Stout steeleye stout Steeleye Stout Steeleye - Updated Stout Steeleye Stout
55 Tarte au sucre Tarte au sucre tarte au sucre Tarte au sucre Tarte - Updated au sucre Tarte au sucre
56 Teatime Chocolate Biscuits Teatime Chocolate Biscuits teatime chocolate biscuits Teatime Chocolate Biscuits Teatime - Updated Chocolate Biscuits Teatime Chocolate Biscuits
57 Thüringer Rostbratwurst Thüringer Rostbratwurst thüringer rostbratwurst Thüringer Rostbratwurst Thüringer - Updated Rostbratwurst Thüringer Rostbratwurst
58 Uncle Bob's Organic Dried Pears Uncle Bob's Organic Dried Pears uncle bob's organic dried pears Uncle Bob's Organic Dried Pears Uncle - Updated Bob's Organic Dried Pears Uncle Bobs Organic Dried Pears
59 Valkoinen suklaa Valkoinen suklaa valkoinen suklaa Valkoinen suklaa Valkoinen - Updated suklaa Valkoinen suklaa
60 Wimmers gute Semmelknödel Wimmers gute Semmelknödel wimmers gute semmelknödel Wimmers gute Semmelknödel Wimmers - Updated gute Semmelknödel Wimmers gute Semmelknödel
61 Zaanse koeken Zaanse koeken zaanse koeken Zaanse koeken Zaanse - Updated koeken Zaanse koeken


2. Usage of SUBSTRING to mask company name.

SQL Server Query 2

            
SELECT  
c.CustomerID,
c.CompanyName,
REVERSE(c.CompanyName) AS ReversedCompanyName,
SUBSTRING(c.CompanyName, 1, 1) + REPLICATE('*', LEN(c.CompanyName) - 2) +
CASE WHEN LEN(c.CompanyName) > 1 THEN REVERSE(SUBSTRING(REVERSE(c.CompanyName), 1, 1)) ELSE '' END AS FirstLastReversedMasked,
o.OrderID,
REVERSE(CAST(o.OrderID AS VARCHAR)) AS ReversedOrderID
FROM
Customers c
LEFT JOIN
Orders o ON c.CustomerID = o.CustomerID
WHERE
LEN(c.CompanyName) > 3 AND (o.OrderID BETWEEN 10316 AND 10319 OR o.OrderID BETWEEN 10398 AND 10401 OR
o.OrderID BETWEEN 10490 AND 10493 OR o.OrderID BETWEEN 10583 AND 10586 OR
o.OrderID BETWEEN 10686 AND 10689 OR o.OrderID BETWEEN 10806 AND 10809 OR
o.OrderID BETWEEN 10988 AND 10991)
ORDER BY
c.CustomerID;

Create SQL query with SqlQueryBuilder 2

            
var (sql2, parameters2) = new SqlQueryBuilder()  
.Select()
.Column("c.CustomerID", "CustomerID")
.Column("c.CompanyName", "CompanyName")
.Column(new REVERSE(new Column("c.CompanyName")), "ReversedCompanyName")
.Column(new CONCAT(
new SUBSTRING(new Column("c.CompanyName"), 1, 1),
new REPLICATE("*", new LEN(new Column("c.CompanyName")).AddArithmatic(new Arithmatic().Subtract(2))),
new CASE()
.When(new LEN(new Column("c.CompanyName")).GreaterThan(1))
.Then(new REVERSE(new SUBSTRING(new REVERSE(new Column("c.CompanyName")), 1, 1)))
.Else("")
), "FirstLastReversedMasked")
.Column("o.OrderID", "OrderID")
.Column(new REVERSE(new CAST(new Column("o.OrderID"), SqlDataType.VARCHAR)), "ReversedOrderID")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new LEFTJOIN().TableName(new Table("Orders","o"))
.On(new Column("c.CustomerID").Equale(new Column("o.CustomerID")))
})
.Where(new Where(new LEN(new Column("c.CompanyName")).GreaterThan(3))
.AND().StartBracket().Compare(new BETWEEN(new Column("o.OrderID"), "10316", "10319"))
.OR(new BETWEEN(new Column("o.OrderID"), "10398", "10401"))
.OR(new BETWEEN(new Column("o.OrderID"), "10490", "10493"))
.OR(new BETWEEN(new Column("o.OrderID"), "10583", "10586"))
.OR(new BETWEEN(new Column("o.OrderID"), "10686", "10689"))
.OR(new BETWEEN(new Column("o.OrderID"), "10806", "10809"))
.OR(new BETWEEN(new Column("o.OrderID"), "10988", "10991"))
.EndBracket()
)
.OrderBy(new OrderBy().SetColumnAscending("c.CustomerID"))
.Build();

Query build by SqlQueryBuilder 2

            
SELECT c.CustomerID AS CustomerID,
       c.CompanyName AS CompanyName,
       REVERSE(c.CompanyName) AS ReversedCompanyName,
       CONCAT(SUBSTRING(c.CompanyName, @pMAIN_2507192019007451820, @pMAIN_2507192019007451821), REPLICATE(@pMAIN_2507192019007451822, LEN(c.CompanyName) - @pMAIN_2507192019007451823), CASE WHEN LEN(c.CompanyName) > @pMAIN_2507192019007451824 THEN REVERSE(SUBSTRING(REVERSE(c.CompanyName), @pMAIN_2507192019007451825, @pMAIN_2507192019007451826)) ELSE @pMAIN_2507192019007451827 END) AS FirstLastReversedMasked,
       o.OrderID AS OrderID,
       REVERSE(CAST (o.OrderID AS VARCHAR)) AS ReversedOrderID
FROM Customers AS c
     LEFT OUTER JOIN
     Orders AS o
     ON c.CustomerID = o.CustomerID
WHERE LEN(c.CompanyName) > @pMAIN_2507192019007451828
      AND (o.OrderID BETWEEN @pMAIN_2507192019007451829 AND @pMAIN_250719201900745182_10
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_11 AND @pMAIN_250719201900745182_12
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_13 AND @pMAIN_250719201900745182_14
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_15 AND @pMAIN_250719201900745182_16
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_17 AND @pMAIN_250719201900745182_18
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_19 AND @pMAIN_250719201900745182_20
           OR o.OrderID BETWEEN @pMAIN_250719201900745182_21 AND @pMAIN_250719201900745182_22)
ORDER BY c.CustomerID ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192019007451820 1
@pMAIN_2507192019007451821 1
@pMAIN_2507192019007451822 *
@pMAIN_2507192019007451823 2
@pMAIN_2507192019007451824 1
@pMAIN_2507192019007451825 1
@pMAIN_2507192019007451826 1
@pMAIN_2507192019007451827
@pMAIN_2507192019007451828 3
@pMAIN_2507192019007451829 10316
@pMAIN_250719201900745182_10 10319
@pMAIN_250719201900745182_11 10398
@pMAIN_250719201900745182_12 10401
@pMAIN_250719201900745182_13 10490
@pMAIN_250719201900745182_14 10493
@pMAIN_250719201900745182_15 10583
@pMAIN_250719201900745182_16 10586
@pMAIN_250719201900745182_17 10686
@pMAIN_250719201900745182_18 10689
@pMAIN_250719201900745182_19 10806
@pMAIN_250719201900745182_20 10809
@pMAIN_250719201900745182_21 10988
@pMAIN_250719201900745182_22 10991

Query Results 2:

  CustomerID CompanyName OrderID ReversedCompanyName FirstLastReversedMasked ReversedOrderID
1 BERGS Berglunds snabbköp 10689 pökbbans sdnulgreB B****************p 98601
2 BLONP Blondesddsl père et fils 10584 slif te erèp lsddsednolB B**********************s 48501
3 BOTTM Bottom-Dollar Markets 10492 stekraM ralloD-mottoB B*******************s 29401
4 EASTC Eastern Connection 10400 noitcennoC nretsaE E****************n 00401
5 ERNSH Ernst Handel 10990 lednaH tsnrE E**********l 09901
6 FRANS Franchi S.p.A. 10807 .A.p.S ihcnarF F************. 70801
7 FURIB Furia Bacalhau e Frutos do Mar 10491 raM od soturF e uahlacaB airuF F****************************r 19401
8 HILAA HILARION-Abastos 10490 sotsabA-NOIRALIH H**************s 09401
9 HUNGO Hungry Owl All-Night Grocers 10687 srecorG thgiN-llA lwO yrgnuH H**************************s 78601
10 ISLAT Island Trading 10318 gnidarT dnalsI I************g 81301
11 LAMAI La maison d'Asie 10493 eisA'd nosiam aL L**************e 39401
12 LONEP Lonesome Pine Restaurant 10317 tnaruatseR eniP emosenoL L**********************t 71301
13 OLDWO Old World Delicatessen 10808 nessetacileD dlroW dlO O********************n 80801
14 PICCO Piccolo und mehr 10686 rhem dnu olocciP P**************r 68601
15 QUEDE Que Delícia 10989 aicíleD euQ Q*********a 98901
16 QUICK QUICK-Stop 10991 potS-KCIUQ Q********p 19901
17 RATTC Rattlesnake Canyon Grocery 10316 yrecorG noynaC ekanselttaR R************************y 61301
18 RATTC Rattlesnake Canyon Grocery 10401 yrecorG noynaC ekanselttaR R************************y 10401
19 RATTC Rattlesnake Canyon Grocery 10988 yrecorG noynaC ekanselttaR R************************y 88901
20 REGGC Reggiani Caseifici 10586 icifiesaC inaiggeR R****************i 68501
21 SAVEA Save-a-lot Markets 10398 stekraM tol-a-evaS S****************s 89301
22 TORTU Tortuga Restaurante 10319 etnaruatseR agutroT T*****************e 91301
23 VAFFE Vaffeljernet 10399 tenrejleffaV V**********t 99301
24 VAFFE Vaffeljernet 10688 tenrejleffaV V**********t 88601
25 VICTE Victuailles en stock 10806 kcots ne selliautciV V******************k 60801
26 WARTH Wartian Herkku 10583 ukkreH naitraW W************u 38501
27 WELLI Wellington Importadora 10585 arodatropmI notgnilleW W********************a 58501
28 WELLI Wellington Importadora 10809 arodatropmI notgnilleW W********************a 90801


3. Usage of SUBSTRING to make customer id encoded.

SQL Server Query 3

            
SELECT TOP 15  
CustomerID,
SUBSTRING(CustomerID, 1, 1) +
CASE SUBSTRING(CustomerID, 2, 1)
WHEN 'L' THEN NCHAR(0x214C) -- Script L
WHEN 'F' THEN NCHAR(0x191) -- Latin Capital Letter F with Hook
WHEN 'K' THEN NCHAR(0x212A) -- Kelvin Sign
ELSE SUBSTRING(CustomerID, 2, 1)
END +
SUBSTRING(CustomerID, 3, 5) AS EncodedCustomerID
FROM
Customers;

Create SQL query with SqlQueryBuilder 3

            
var (sql3, parameters3) = new SqlQueryBuilder()  
.Select().Top(15)
.Column("CustomerID", "CustomerID")
.Column(new CONCAT(
new SUBSTRING(new Column("CustomerID"), 1, 1),
new CASE(new SUBSTRING(new Column("CustomerID"), 2, 1))
.When("L").Then(new NCHAR(0x214C))
.When("F").Then(new NCHAR(0x191))
.When("K").Then(new NCHAR(0x212A))
.Else(new SUBSTRING(new Column("CustomerID"), 2, 1)),
new SUBSTRING(new Column("CustomerID"), 3, 5)
), "EncodedCustomerID")
.From("Customers")
.Build();

Query build by SqlQueryBuilder 3

            
SELECT TOP 15 CustomerID AS CustomerID,
              CONCAT(SUBSTRING(CustomerID, @pMAIN_2507192019007653220, @pMAIN_2507192019007653221), CASE SUBSTRING(CustomerID, @pMAIN_2507192019007653222, @pMAIN_2507192019007653223) WHEN @pMAIN_2507192019007653224 THEN NCHAR(8524) WHEN @pMAIN_2507192019007653225 THEN NCHAR(401) WHEN @pMAIN_2507192019007653226 THEN NCHAR(8490) ELSE SUBSTRING(CustomerID, @pMAIN_2507192019007653227, @pMAIN_2507192019007653228) END, SUBSTRING(CustomerID, @pMAIN_2507192019007653229, @pMAIN_250719201900765322_10)) AS EncodedCustomerID
FROM Customers;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192019007653220 1
@pMAIN_2507192019007653221 1
@pMAIN_2507192019007653222 2
@pMAIN_2507192019007653223 1
@pMAIN_2507192019007653224 L
@pMAIN_2507192019007653225 F
@pMAIN_2507192019007653226 K
@pMAIN_2507192019007653227 2
@pMAIN_2507192019007653228 1
@pMAIN_2507192019007653229 3
@pMAIN_250719201900765322_10 5

Query Results 3:

  CustomerID EncodedCustomerID
1 ALFKI A⅌FKI
2 ANATR ANATR
3 ANTON ANTON
4 AROUT AROUT
5 BERGS BERGS
6 BLAUS B⅌AUS
7 BLONP B⅌ONP
8 BOLID BOLID
9 BONAP BONAP
10 BSBEV BSBEV
11 CACTU CACTU
12 CENTC CENTC
13 CHOPS CHOPS
14 CONSH CONSH
15 DRACD DRACD


4. Usage of SUBSTRING to extract first character of second word from company name.

SQL Server Query 4

            
SELECT CustomerID, CompanyName,   
SUBSTRING(CompanyName, 1, CHARINDEX(' ', CompanyName) - 1) AS FirstWord
FROM Customers
WHERE CHARINDEX(' ', CompanyName) > 0; -- Only show companies with at least one space

Create SQL query with SqlQueryBuilder 4

            
var (sql4, parameters4) = new SqlQueryBuilder()  
.Select().Columns("CustomerID", "CompanyName")
.Column(new SUBSTRING(new Column("CompanyName"), 1, new CHARINDEX(" ", new Column("CompanyName"), 1).AddArithmatic(new Arithmatic().Subtract(-1))), "FirstWord")
.From("Customers")
.Where(new Where(new CHARINDEX(" ", new Column("CompanyName")).GreaterThan(0)))
.Build();

Query build by SqlQueryBuilder 4

            
SELECT CustomerID,
       CompanyName,
       SUBSTRING(CompanyName, @pMAIN_2507192019007699530, CHARINDEX(@pMAIN_2507192019007699531, CompanyName, 1) - @pMAIN_2507192019007699532) AS FirstWord
FROM Customers
WHERE CHARINDEX(@pMAIN_2507192019007699533, CompanyName, 1) > @pMAIN_2507192019007699534;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192019007699530 1
@pMAIN_2507192019007699531
@pMAIN_2507192019007699532 -1
@pMAIN_2507192019007699533
@pMAIN_2507192019007699534 0

Query Results 4:

  CustomerID CompanyName FirstWord
1 ALFKI Alfreds Futterkiste Alfreds F
2 ANATR Ana Trujillo Emparedados y helados Ana T
3 ANTON Antonio Moreno Taquería Antonio M
4 AROUT Around the Horn Around t
5 BERGS Berglunds snabbköp Berglunds s
6 BLAUS Blauer See Delikatessen Blauer S
7 BLONP Blondesddsl père et fils Blondesddsl p
8 BOLID Bólido Comidas preparadas Bólido C
9 BONAP Bon app' Bon a
10 BOTTM Bottom-Dollar Markets Bottom-Dollar M
11 BSBEV B's Beverages B's B
12 CACTU Cactus Comidas para llevar Cactus C
13 CENTC Centro comercial Moctezuma Centro c
14 CHOPS Chop-suey Chinese Chop-suey C
15 COMMI Comércio Mineiro Comércio M
16 CONSH Consolidated Holdings Consolidated H
17 WANDK Die Wandernde Kuh Die W
18 DRACD Drachenblut Delikatessen Drachenblut D
19 DUMON Du monde entier Du m
20 EASTC Eastern Connection Eastern C
21 ERNSH Ernst Handel Ernst H
22 FAMIA Familia Arquibaldo Familia A
23 FISSA FISSA Fabrica Inter. Salchichas S.A. FISSA F
24 FOLIG Folies gourmandes Folies g
25 FOLKO Folk och fä HB Folk o
26 FRANR France restauration France r
27 FRANS Franchi S.p.A. Franchi S
28 FURIB Furia Bacalhau e Frutos do Mar Furia B
29 GALED Galería del gastrónomo Galería d
30 GODOS Godos Cocina Típica Godos C
31 GOURL Gourmet Lanchonetes Gourmet L
32 GREAL Great Lakes Food Market Great L
33 HANAR Hanari Carnes Hanari C
34 HUNGC Hungry Coyote Import Store Hungry C
35 HUNGO Hungry Owl All-Night Grocers Hungry O
36 ISLAT Island Trading Island T
37 KOENE Königlich Essen Königlich E
38 LACOR La corne d'abondance La c
39 LAMAI La maison d'Asie La m
40 LAUGB Laughing Bacchus Wine Cellars Laughing B
41 LAZYK Lazy K Kountry Store Lazy K
42 LEHMS Lehmanns Marktstand Lehmanns M
43 LETSS Let's Stop N Shop Let's S
44 LONEP Lonesome Pine Restaurant Lonesome P
45 MAGAA Magazzini Alimentari Riuniti Magazzini A
46 MAISD Maison Dewey Maison D
47 MEREP Mère Paillarde Mère P
48 MORGK Morgenstern Gesundkost Morgenstern G
49 OCEAN Océano Atlántico Ltda. Océano A
50 OLDWO Old World Delicatessen Old W
51 OTTIK Ottilies Käseladen Ottilies K
52 PARIS Paris spécialités Paris s
53 PERIC Pericles Comidas clásicas Pericles C
54 PICCO Piccolo und mehr Piccolo u
55 PRINI Princesa Isabel Vinhos Princesa I
56 QUEDE Que Delícia Que D
57 QUEEN Queen Cozinha Queen C
58 RANCH Rancho grande Rancho g
59 RATTC Rattlesnake Canyon Grocery Rattlesnake C
60 REGGC Reggiani Caseifici Reggiani C
61 RICAR Ricardo Adocicados Ricardo A
62 RICSU Richter Supermarkt Richter S
63 ROMEY Romero y tomillo Romero y
64 SANTG Santé Gourmet Santé G
65 SAVEA Save-a-lot Markets Save-a-lot M
66 SEVES Seven Seas Imports Seven S
67 SIMOB Simons bistro Simons b
68 SPECD Spécialités du monde Spécialités d
69 SPLIR Split Rail Beer & Ale Split R
70 SUPRD Suprêmes délices Suprêmes d
71 THEBI The Big Cheese The B
72 THECR The Cracker Box The C
73 TOMSP Toms Spezialitäten Toms S
74 TORTU Tortuga Restaurante Tortuga R
75 TRADH Tradição Hipermercados Tradição H
76 TRAIH Trail's Head Gourmet Provisioners Trail's H
77 VICTE Victuailles en stock Victuailles e
78 VINET Vins et alcools Chevalier Vins e
79 WARTH Wartian Herkku Wartian H
80 WELLI Wellington Importadora Wellington I
81 WHITC White Clover Markets White C
82 WILMK Wilman Kala Wilman K
83 WOLZA Wolski Zajazd Wolski


5. Usage of SUBSTRING to make partial OrderID and utilize in join.

SQL Server Query 5

            
WITH CustomerPhoneSuffix AS (  
SELECT
CustomerID,
CompanyName,
Phone,
-- Extract the last 4 digits of the phone number
RIGHT(Phone, 4) AS LastFourDigits
FROM
Customers
WHERE
LEN(Phone) >= 4
),
CustomerWithFaxSuffix AS (
SELECT
CustomerID,
CompanyName,
Fax,
-- Extract the last 3 digits of the fax number if it exists
CASE
WHEN Fax IS NOT NULL AND LEN(Fax) >= 3 THEN RIGHT(Fax, 3)
ELSE NULL
END AS LastThreeFaxDigits
FROM
Customers
),
OrderDetailsWithUnitPriceSuffix AS (
SELECT
od.OrderID,
p.ProductName,
od.UnitPrice,
-- Extract the last digit of the UnitPrice
RIGHT(CAST(FLOOR(od.UnitPrice) AS VARCHAR), 1) AS UnitPriceLastDigit
FROM
[Order Details] od
JOIN
Products p ON od.ProductID = p.ProductID
)
SELECT
c.CustomerID,
c.CompanyName,
cps.LastFourDigits AS PhoneLastFour,
cfx.LastThreeFaxDigits AS FaxLastThree,
oud.OrderID,
oud.ProductName,
oud.UnitPrice,
oud.UnitPriceLastDigit
FROM
Customers c
LEFT JOIN
CustomerPhoneSuffix cps ON c.CustomerID = cps.CustomerID
LEFT JOIN
CustomerWithFaxSuffix cfx ON c.CustomerID = cfx.CustomerID
LEFT JOIN
OrderDetailsWithUnitPriceSuffix oud ON c.CustomerID = SUBSTRING(CAST(oud.OrderID AS VARCHAR), 1, 5) -- Attempting a join based on partial OrderID (illustrative, might not be logically sound)
WHERE
cps.LastFourDigits IS NOT NULL OR cfx.LastThreeFaxDigits IS NOT NULL OR oud.UnitPriceLastDigit IS NOT NULL
ORDER BY
c.CustomerID;

Create SQL query with SqlQueryBuilder 5

            
var (sql5, parameters5) = new SqlQueryBuilder()  
.WithCTETable(new Table("CustomerPhoneSuffix"), new SqlQueryBuilder()
.Select()
.Columns("CustomerID", "CompanyName", "Phone")
.Column(new RIGHT(new Column("Phone"), 4), "LastFourDigits")
.From("Customers")
.Where(new Where(new LEN(new Column("Phone")).GreaterThanOrEqualeTo(4)))
)
.WithCTETable(new Table("CustomerWithFaxSuffix"), new SqlQueryBuilder()
.Select()
.Columns("CustomerID", "CompanyName", "Fax")
.Column(new CASE()
.When(new IS_NOT_NULL(new Column("Fax")).AND(new LEN(new Column("FAX")).GreaterThanOrEqualeTo(3)))
.Then(new RIGHT(new Column("Fax"), 3))
.Else(new Column().SetNull())
, "LastThreeFaxDigits")
.From("Customers")
)
.WithCTETable(new Table("OrderDetailsWithUnitPriceSuffix"), new SqlQueryBuilder()
.Select()
.Columns("od.OrderID", "p.ProductName", "od.UnitPrice")
.Column(new RIGHT(new CAST(new FLOOR(new Column("od.UnitPrice")), SqlDataType.VARBINARY), 1), "UnitPriceLastDigit")
.From("[Order Details]", "od")
.Join(new List<IJoin>() {
new Join(SQLJoin.INNERJOIN).TableName(new Table("Products","p"))
.On(new Column("od.ProductID"), SQLComparisonOperators.EQUALE_TO, new Column("p.ProductID"))
})
)
.Select()
.Columns("c.CustomerID", "c.CompanyName")
.Column("cps.LastFourDigits", "PhoneLastFour")
.Column("cfx.LastThreeFaxDigits", "FaxLastThree")
.Columns("oud.OrderID", "oud.ProductName", "oud.UnitPrice", "oud.UnitPriceLastDigit")
.From("Customers", "c")
.Join(new List<IJoin>()
{
new LEFTJOIN().TableName(new Table("CustomerPhoneSuffix","cps"))
.On(new Column("c.CustomerID"), SQLComparisonOperators.EQUALE_TO, new Column("cps.CustomerID")),
new LEFTJOIN().TableName(new Table("CustomerWithFaxSuffix","cfx"))
.On(new Column("c.CustomerID"), SQLComparisonOperators.EQUALE_TO, new Column("cfx.CustomerID")),
new LEFTJOIN().TableName(new Table("OrderDetailsWithUnitPriceSuffix","oud"))
.On(new Column("c.CustomerID"), SQLComparisonOperators.EQUALE_TO, new SUBSTRING(new CAST(new Column("oud.OrderID"), SqlDataType.VARCHAR),1,5))
})
.Where(new Where(new IS_NOT_NULL(new Column("cps.LastFourDigits")))
.OR(new IS_NOT_NULL(new Column("cfx.LastThreeFaxDigits")))
.OR(new IS_NOT_NULL(new Column("oud.UnitPriceLastDigit")))
)
.OrderBy(new OrderBy().Set(new Column("c.CustomerID")))
.Build();

Query build by SqlQueryBuilder 5

            
WITH CustomerPhoneSuffix
AS (SELECT CustomerID,
           CompanyName,
           Phone,
           RIGHT(Phone, @pMAIN_2507192019007747060) AS LastFourDigits
    FROM Customers
    WHERE LEN(Phone) >= @pMAIN_2507192019007747061),
 CustomerWithFaxSuffix
AS (SELECT CustomerID,
           CompanyName,
           Fax,
           CASE WHEN Fax IS NOT NULL
                     AND LEN(FAX) >= @pMAIN_2507192019007747062 THEN RIGHT(Fax, @pMAIN_2507192019007747063) ELSE NULL END AS LastThreeFaxDigits
    FROM Customers),
 OrderDetailsWithUnitPriceSuffix
AS (SELECT od.OrderID,
           p.ProductName,
           od.UnitPrice,
           RIGHT(CAST (FLOOR(od.UnitPrice) AS VARBINARY), @pMAIN_2507192019007747064) AS UnitPriceLastDigit
    FROM [Order Details] AS od
         INNER JOIN
         Products AS p
         ON od.ProductID = p.ProductID)
SELECT c.CustomerID,
       c.CompanyName,
       cps.LastFourDigits AS PhoneLastFour,
       cfx.LastThreeFaxDigits AS FaxLastThree,
       oud.OrderID,
       oud.ProductName,
       oud.UnitPrice,
       oud.UnitPriceLastDigit
FROM Customers AS c
     LEFT OUTER JOIN
     CustomerPhoneSuffix AS cps
     ON c.CustomerID = cps.CustomerID
     LEFT OUTER JOIN
     CustomerWithFaxSuffix AS cfx
     ON c.CustomerID = cfx.CustomerID
     LEFT OUTER JOIN
     OrderDetailsWithUnitPriceSuffix AS oud
     ON c.CustomerID = SUBSTRING(CAST (oud.OrderID AS VARCHAR), @pMAIN_2507192019007747065, @pMAIN_2507192019007747066)
WHERE cps.LastFourDigits IS NOT NULL
      OR cfx.LastThreeFaxDigits IS NOT NULL
      OR oud.UnitPriceLastDigit IS NOT NULL
ORDER BY c.CustomerID ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507192019007747060 4
@pMAIN_2507192019007747061 4
@pMAIN_2507192019007747062 3
@pMAIN_2507192019007747063 3
@pMAIN_2507192019007747064 1
@pMAIN_2507192019007747065 1
@pMAIN_2507192019007747066 5

Query Results 5:

  CustomerID CompanyName PhoneLastFour FaxLastThree OrderID UnitPriceLastDigit
1 ALFKI Alfreds Futterkiste 4321 545 0
2 ANATR Ana Trujillo Emparedados y helados 4729 745 0
3 ANTON Antonio Moreno Taquería 3932 0
4 AROUT Around the Horn 7788 750 0
5 BERGS Berglunds snabbköp 4 65 67 0
6 BLAUS Blauer See Delikatessen 8460 924 0
7 BLONP Blondesddsl père et fils 5.31 .32 0
8 BOLID Bólido Comidas preparadas 2 82 99 0
9 BONAP Bon app' 5.40 .41 0
10 BOTTM Bottom-Dollar Markets 4729 745 0
11 BSBEV B's Beverages 1212 0
12 CACTU Cactus Comidas para llevar 5555 892 0
13 CENTC Centro comercial Moctezuma 3392 293 0
14 CHOPS Chop-suey Chinese 6545 0
15 COMMI Comércio Mineiro 7647 0
16 CONSH Consolidated Holdings 2282 199 0
17 DRACD Drachenblut Delikatessen 9123 428 0
18 DUMON Du monde entier 8.88 .89 0
19 EASTC Eastern Connection 0297 373 0
20 ERNSH Ernst Handel 3425 426 0
21 FAMIA Familia Arquibaldo 9857 0
22 FISSA FISSA Fabrica Inter. Salchichas S.A. 4 44 93 0
23 FOLIG Folies gourmandes 0.16 .17 0
24 FOLKO Folk och fä HB 7 21 0
25 FRANK Frankenversand 7310 451 0
26 FRANR France restauration 1.21 .20 0
27 FRANS Franchi S.p.A. 8260 261 0
28 FURIB Furia Bacalhau e Frutos do Mar 2534 535 0
29 GALED Galería del gastrónomo 4560 561 0
30 GODOS Godos Cocina Típica 2 82 0
31 GOURL Gourmet Lanchonetes 9482 0
32 GREAL Great Lakes Food Market 7555 0
33 GROSR GROSELLA-Restaurante 2951 397 0
34 HANAR Hanari Carnes 0091 765 0
35 HILAA HILARION-Abastos 1340 948 0
36 HUNGC Hungry Coyote Import Store 6874 376 0
37 HUNGO Hungry Owl All-Night Grocers 542 333 0
38 ISLAT Island Trading 8888 0
39 KOENE Königlich Essen 9876 0
40 LACOR La corne d'abondance 4.10 .11 0
41 LAMAI La maison d'Asie 1.10 .11 0
42 LAUGB Laughing Bacchus Wine Cellars 3392 293 0
43 LAZYK Lazy K Kountry Store 7969 221 0
44 LEHMS Lehmanns Marktstand 5984 874 0
45 LETSS Let's Stop N Shop 5938 0
46 LILAS LILA-Supermercado 6954 256 0
47 LINOD LINO-Delicateses 6-12 -93 0
48 LONEP Lonesome Pine Restaurant 9573 646 0
49 MAGAA Magazzini Alimentari Riuniti 0230 231 0
50 MAISD Maison Dewey 4 67 68 0
51 MEREP Mère Paillarde 8054 055 0
52 MORGK Morgenstern Gesundkost 3176 0
53 NORTS North/South 7733 530 0
54 OCEAN Océano Atlántico Ltda. 5333 535 0
55 OLDWO Old World Delicatessen 7584 880 0
56 OTTIK Ottilies Käseladen 4327 721 0
57 PARIS Paris spécialités 2.66 .77 0
58 PERIC Pericles Comidas clásicas 3745 745 0
59 PICCO Piccolo und mehr 9722 723 0
60 PRINI Princesa Isabel Vinhos 5634 0
61 QUEDE Que Delícia 4252 545 0
62 QUEEN Queen Cozinha 1189 0
63 QUICK QUICK-Stop 5188 0
64 RANCH Rancho grande 5555 556 0
65 RATTC Rattlesnake Canyon Grocery 5939 620 0
66 REGGC Reggiani Caseifici 6721 722 0
67 RICAR Ricardo Adocicados 3412 0
68 RICSU Richter Supermarkt 4214 0
69 ROMEY Romero y tomillo 6200 210 0
70 SANTG Santé Gourmet 2 35 47 0
71 SAVEA Save-a-lot Markets 8097 0
72 SEVES Seven Seas Imports 1717 646 0
73 SIMOB Simons bistro 4 56 57 0
74 SPECD Spécialités du monde 0.10 .20 0
75 SPLIR Split Rail Beer & Ale 4680 525 0
76 SUPRD Suprêmes délices 2 20 21 0
77 THEBI The Big Cheese 3612 0
78 THECR The Cracker Box 5834 083 0
79 TOMSP Toms Spezialitäten 1259 695 0
80 TORTU Tortuga Restaurante 2933 0
81 TRADH Tradição Hipermercados 2167 168 0
82 TRAIH Trail's Head Gourmet Provisioners 8257 174 0
83 VAFFE Vaffeljernet 2 43 44 0
84 VICTE Victuailles en stock 4.86 .87 0
85 VINET Vins et alcools Chevalier 5.10 .11 0
86 WANDK Die Wandernde Kuh 0361 428 0
87 WARTH Wartian Herkku 3655 655 0
88 WELLI Wellington Importadora 8122 0
89 WHITC White Clover Markets 4112 115 0
90 WILMK Wilman Kala 8858 858 0
91 WOLZA Wolski Zajazd 7012 012 0