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)
|