Other STUFF SQL function


1. Usage of STUFF to mask customer phone number

SQL Server Query 1

            
 SELECT TOP 15  
CustomerID,
ContactName,
Phone,
STUFF(Phone, 3, LEN(Phone) - 4, REPLICATE('X', LEN(Phone) - 4)) AS AnonymizedPhoneNumber
FROM
Customers;

Create SQL query with SqlQueryBuilder 1

            
 var (sql1, parameters1) = new SqlQueryBuilder()  
.Select().Top(15)
.Columns("CustomerID", "ContactName", "Phone")
.Column(new STUFF(new Column("Phone"), 3, new LEN(new Column("Phone")).AddArithmatic(new Arithmatic().Subtract(4)),
new REPLICATE("X", new LEN(new Column("Phone")).AddArithmatic(new Arithmatic().Subtract(4)))), "AnonymizedPhoneNumber")
.From("Customers")
.Build();

Query build by SqlQueryBuilder 1

            
SELECT TOP 15 CustomerID,
              ContactName,
              Phone,
              STUFF(Phone, @pMAIN_2507200205126430310, LEN(Phone) - @pMAIN_2507200205126430311, REPLICATE(@pMAIN_2507200205126430312, LEN(Phone) - @pMAIN_2507200205126430313)) AS AnonymizedPhoneNumber
FROM Customers;


            
        

Parameters (If used)

Name Value
@pMAIN_2507200205126430310 3
@pMAIN_2507200205126430311 4
@pMAIN_2507200205126430312 X
@pMAIN_2507200205126430313 4

Query Results 1:

  CustomerID ContactName Phone AnonymizedPhoneNumber
1 ALFKI Maria Anders 030-0074321 03XXXXXXX21
2 ANATR Ana Trujillo (5) 555-4729 (5XXXXXXXX29
3 ANTON Antonio Moreno (5) 555-3932 (5XXXXXXXX32
4 AROUT Thomas Hardy (171) 555-7788 (1XXXXXXXXXX88
5 BERGS Christina Berglund 0921-12 34 65 09XXXXXXXXX65
6 BLAUS Hanna Moos 0621-08460 06XXXXXX60
7 BLONP Frédérique Citeaux 88.60.15.31 88XXXXXXX31
8 BOLID Martín Sommer (91) 555 22 82 (9XXXXXXXXXX82
9 BONAP Laurence Lebihan 91.24.45.40 91XXXXXXX40
10 BOTTM Elizabeth Lincoln (604) 555-4729 (6XXXXXXXXXX29
11 BSBEV Victoria Ashworth (171) 555-1212 (1XXXXXXXXXX12
12 CACTU Patricio Simpson (1) 135-5555 (1XXXXXXXX55
13 CENTC Francisco Chang (5) 555-3392 (5XXXXXXXX92
14 CHOPS Yang Wang 0452-076545 04XXXXXXX45
15 COMMI Pedro Afonso (11) 555-7647 (1XXXXXXXXX47


2. Usage of STUFF

SQL Server Query 2

            
 SELECT TOP 10  
o.OrderID,
c.CompanyName,
(
SELECT
STUFF((
SELECT ', ' + p.ProductName + ' (Qty: ' + CAST(od.Quantity AS VARCHAR) + ')'
FROM [Order Details] od_inner
JOIN Products p ON od_inner.ProductID = p.ProductID
WHERE od_inner.OrderID = o.OrderID
FOR XML PATH('')
), 1, 2, '')
) AS OrderDetails
FROM
Orders o
JOIN
Customers c ON o.CustomerID = c.CustomerID
JOIN
[Order Details] od ON o.OrderID = od.OrderID
ORDER BY
o.OrderID;

Create SQL query with SqlQueryBuilder 2

            
 var (sql2, parameters2) = new SqlQueryBuilder()  
.Select().Top(10)
.Columns("o.OrderID", "c.CompanyName")
.Column(new SqlQueryBuilder()
.Select()
.Column(new STUFF(new Column(new SqlQueryBuilder()
.Select()
.Column(new CONCAT(", ", new Column("p.ProductName"), "(Qty: ", new CAST(new Column("od.Quantity"), SqlDataType.VARCHAR), ")"), "OrderDetails")
.From("[Order Details]", "od_inner")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName(new Table("Products","p"))
.On(new Column("od_inner.ProductID").Equale(new Column("p.ProductID")))
})
.Where(new Where(new Column("od_inner.OrderID").Equale(new Column("o.OrderID"))))
.ForXml(new FOR_XML_PATH(""))), 1, 2, ""), "OrderDetails")
, "OrderDetails")
.From("Orders", "o")
.Join(new List<IJoin>()
{
new INNERJOIN().TableName(new Table("Customers","c"))
.On(new Column("o.CustomerID").Equale(new Column("c.CustomerID"))),
new INNERJOIN().TableName(new Table("[Order Details]","od"))
.On(new Column("o.OrderID").Equale(new Column("od.OrderID")))
})
.OrderBy(new OrderBy().SetColumnAscending("o.OrderID"))
.Build();

Query build by SqlQueryBuilder 2

            
SELECT TOP 10 o.OrderID,
              c.CompanyName,
              (SELECT STUFF((SELECT CONCAT(@pMAIN_2507200205126499220, p.ProductName, @pMAIN_2507200205126499221, CAST (od.Quantity AS VARCHAR), @pMAIN_2507200205126499222)
                             FROM [Order Details] AS od_inner
                                  INNER JOIN
                                  Products AS p
                                  ON od_inner.ProductID = p.ProductID
                             WHERE od_inner.OrderID = o.OrderID
                             FOR XML PATH ('')), @pMAIN_2507200205126499223, @pMAIN_2507200205126499224, @pMAIN_2507200205126499225)) AS OrderDetails
FROM Orders AS o
     INNER JOIN
     Customers AS c
     ON o.CustomerID = c.CustomerID
     INNER JOIN
     [Order Details] AS od
     ON o.OrderID = od.OrderID
ORDER BY o.OrderID ASC;


            
        

Parameters (If used)

Name Value
@pMAIN_2507200205126499220 ,
@pMAIN_2507200205126499221 (Qty:
@pMAIN_2507200205126499222 )
@pMAIN_2507200205126499223 1
@pMAIN_2507200205126499224 2
@pMAIN_2507200205126499225

Query Results 2:

  OrderID CompanyName OrderDetails
1 10248 Vins et alcools Chevalier Queso Cabrales(Qty: 12), Singaporean Hokkien Fried Mee(Qty: 12), Mozzarella di Giovanni(Qty: 12)
2 10248 Vins et alcools Chevalier Queso Cabrales(Qty: 10), Singaporean Hokkien Fried Mee(Qty: 10), Mozzarella di Giovanni(Qty: 10)
3 10248 Vins et alcools Chevalier Queso Cabrales(Qty: 5), Singaporean Hokkien Fried Mee(Qty: 5), Mozzarella di Giovanni(Qty: 5)
4 10249 Toms Spezialitäten Tofu(Qty: 9), Manjimup Dried Apples(Qty: 9)
5 10249 Toms Spezialitäten Tofu(Qty: 40), Manjimup Dried Apples(Qty: 40)
6 10250 Hanari Carnes Jack's New England Clam Chowder(Qty: 10), Manjimup Dried Apples(Qty: 10), Louisiana Fiery Hot Pepper Sauce(Qty: 10)
7 10250 Hanari Carnes Jack's New England Clam Chowder(Qty: 35), Manjimup Dried Apples(Qty: 35), Louisiana Fiery Hot Pepper Sauce(Qty: 35)
8 10250 Hanari Carnes Jack's New England Clam Chowder(Qty: 15), Manjimup Dried Apples(Qty: 15), Louisiana Fiery Hot Pepper Sauce(Qty: 15)
9 10251 Victuailles en stock Gustaf's Knäckebröd(Qty: 6), Ravioli Angelo(Qty: 6), Louisiana Fiery Hot Pepper Sauce(Qty: 6)
10 10251 Victuailles en stock Gustaf's Knäckebröd(Qty: 15), Ravioli Angelo(Qty: 15), Louisiana Fiery Hot Pepper Sauce(Qty: 15)