DATEADD SQL function
1. Usage of DATEADD for order processing time.
SQL Server Query 1
WITH OrderProcessed AS (
SELECT OrderID,
DATEADD(HOUR, 2, OrderDate) AS OrderProcessedDate
FROM Orders
WHERE OrderID IN (10248, 10249, 10250, 10251)
),
OrderProcessing AS (
SELECT
Orders.OrderID,
OrderDate,
op.OrderProcessedDate,
CASE
WHEN op.OrderProcessedDate IS NULL THEN 'Not Processed Yet'
ELSE CONCAT(DATEDIFF(MINUTE, OrderDate, op.OrderProcessedDate), ' Minutes')
END AS ProcessingTime,
-- Calculate the scheduled processing time (e.g., 2 hours after OrderDate)
DATEADD(HOUR, 2, OrderDate) AS ScheduledProcessTime
FROM Orders LEFT JOIN OrderProcessed op ON op.OrderId = Orders.OrderID
WHERE Orders.OrderID IN (10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255)
)
SELECT
OrderID,
OrderDate,
ScheduledProcessTime,
OrderProcessedDate,
ProcessingTime,
CASE
WHEN OrderProcessedDate IS NULL THEN 'Not Processed'
WHEN OrderProcessedDate <= DATEADD(MINUTE, -30, ScheduledProcessTime) THEN 'Early Processing'
WHEN OrderProcessedDate >= DATEADD(MINUTE, 30, ScheduledProcessTime) THEN 'Late Processing'
ELSE 'On-Time Processing'
END AS ProcessingStatus
FROM OrderProcessing;
Create SQL query with SqlQueryBuilder 1
var (sql1, parameters1) = new SqlQueryBuilder()
.WithCTETable(new Table("OrderProcessed"), new SqlQueryBuilder()
.Select().Column("OrderID", "OrderID")
.Column(new DATEADD(SqlDateInterval.hour, 2, new Column("OrderDate")), "OrderProcessedDate")
.From("Orders")
.Where(new Where(new IN(new Column("OrderID"), 10248, 10249, 10250, 10251)))
)
.WithCTETable(new Table("OrderProcessing"), new SqlQueryBuilder()
.Select()
.Columns("Orders.OrderID", "OrderDate", "op.OrderProcessedDate")
.Column(new CASE()
.When(new IS_NULL(new Column("op.OrderProcessedDate")))
.Then("Not Processed Yet")
.Else(new CONCAT(new DATEDIFF(SqlDateInterval.minute, new Column("OrderDate"), new Column("op.OrderProcessedDate"))
, " Minutes")), "ProcessingTime")
.Column(new DATEADD(SqlDateInterval.hour, 2, new Column("OrderDate")), "ScheduledProcessTime")
.From("Orders")
.Join(new List<IJoin>()
{
new LEFTJOIN().TableName(new Table("OrderProcessed","op"))
.On(new Column("op.OrderId"), SQLComparisonOperators.EQUALE_TO, new Column("Orders.OrderID"))
})
.Where(new Where(new IN(new Column("Orders.OrderID"), 10248, 10249, 10250, 10251, 10252, 10253, 10254, 10255)))
)
.Select().Columns("OrderID", "OrderDate", "ScheduledProcessTime", "OrderProcessedDate", "ProcessingTime")
.Column(new CASE()
.When(new IS_NULL(new Column("OrderProcessedDate")))
.Then("Not Processed")
.When(new Column("OrderProcessedDate").LessThanOrEqualeTo(
new DATEADD(SqlDateInterval.minute, -30, new Column("ScheduledProcessTime"))))
.Then("Early Processing")
.When(new Column("OrderProcessedDate").LessThanOrEqualeTo(
new DATEADD(SqlDateInterval.minute, 30, new Column("ScheduledProcessTime"))))
.Then("Late Processing")
.Else("On-Time Processing")
, "ProcessingStatus")
.From("OrderProcessing")
.Build();
Query build by SqlQueryBuilder 1
WITH OrderProcessed
AS (SELECT OrderID AS OrderID,
DATEADD(hour, @pMAIN_2507200159531550880, OrderDate) AS OrderProcessedDate
FROM Orders
WHERE OrderID IN (@pMAIN_2507200159531550881, @pMAIN_2507200159531550882, @pMAIN_2507200159531550883, @pMAIN_2507200159531550884)),
OrderProcessing
AS (SELECT Orders.OrderID,
OrderDate,
op.OrderProcessedDate,
CASE WHEN op.OrderProcessedDate IS NULL THEN @pMAIN_2507200159531550885 ELSE CONCAT(DATEDIFF(minute, OrderDate, op.OrderProcessedDate), @pMAIN_2507200159531550886) END AS ProcessingTime,
DATEADD(hour, @pMAIN_2507200159531550887, OrderDate) AS ScheduledProcessTime
FROM Orders
LEFT OUTER JOIN
OrderProcessed AS op
ON op.OrderId = Orders.OrderID
WHERE Orders.OrderID IN (@pMAIN_2507200159531550888, @pMAIN_2507200159531550889, @pMAIN_250720015953155088_10, @pMAIN_250720015953155088_11, @pMAIN_250720015953155088_12, @pMAIN_250720015953155088_13, @pMAIN_250720015953155088_14, @pMAIN_250720015953155088_15))
SELECT OrderID,
OrderDate,
ScheduledProcessTime,
OrderProcessedDate,
ProcessingTime,
CASE WHEN OrderProcessedDate IS NULL THEN @pMAIN_250720015953155088_16 WHEN OrderProcessedDate <= DATEADD(minute, @pMAIN_250720015953155088_17, ScheduledProcessTime) THEN @pMAIN_250720015953155088_18 WHEN OrderProcessedDate <= DATEADD(minute, @pMAIN_250720015953155088_19, ScheduledProcessTime) THEN @pMAIN_250720015953155088_20 ELSE @pMAIN_250720015953155088_21 END AS ProcessingStatus
FROM OrderProcessing;
Parameters (If used)
Name |
Value |
@pMAIN_2507200159531550880 |
2 |
@pMAIN_2507200159531550881 |
10248 |
@pMAIN_2507200159531550882 |
10249 |
@pMAIN_2507200159531550883 |
10250 |
@pMAIN_2507200159531550884 |
10251 |
@pMAIN_2507200159531550885 |
Not Processed Yet |
@pMAIN_2507200159531550886 |
Minutes |
@pMAIN_2507200159531550887 |
2 |
@pMAIN_2507200159531550888 |
10248 |
@pMAIN_2507200159531550889 |
10249 |
@pMAIN_250720015953155088_10 |
10250 |
@pMAIN_250720015953155088_11 |
10251 |
@pMAIN_250720015953155088_12 |
10252 |
@pMAIN_250720015953155088_13 |
10253 |
@pMAIN_250720015953155088_14 |
10254 |
@pMAIN_250720015953155088_15 |
10255 |
@pMAIN_250720015953155088_16 |
Not Processed |
@pMAIN_250720015953155088_17 |
-30 |
@pMAIN_250720015953155088_18 |
Early Processing |
@pMAIN_250720015953155088_19 |
30 |
@pMAIN_250720015953155088_20 |
Late Processing |
@pMAIN_250720015953155088_21 |
On-Time Processing |
Query Results 1:
|
OrderID |
OrderDate |
OrderProcessedDate |
ProcessingTime |
QueryRunTime |
ProcessingStatus |
1 |
10248
|
7/4/1996 12:00:00 AM
|
7/4/1996 2:00:00 AM
|
120 Minutes
|
1/1/0001 12:00:00 AM
|
Late Processing
|
2 |
10249
|
7/5/1996 12:00:00 AM
|
7/5/1996 2:00:00 AM
|
120 Minutes
|
1/1/0001 12:00:00 AM
|
Late Processing
|
3 |
10250
|
7/8/1996 12:00:00 AM
|
7/8/1996 2:00:00 AM
|
120 Minutes
|
1/1/0001 12:00:00 AM
|
Late Processing
|
4 |
10251
|
7/8/1996 12:00:00 AM
|
7/8/1996 2:00:00 AM
|
120 Minutes
|
1/1/0001 12:00:00 AM
|
Late Processing
|
5 |
10252
|
7/9/1996 12:00:00 AM
|
|
Not Processed Yet
|
1/1/0001 12:00:00 AM
|
Not Processed
|
6 |
10253
|
7/10/1996 12:00:00 AM
|
|
Not Processed Yet
|
1/1/0001 12:00:00 AM
|
Not Processed
|
7 |
10254
|
7/11/1996 12:00:00 AM
|
|
Not Processed Yet
|
1/1/0001 12:00:00 AM
|
Not Processed
|
8 |
10255
|
7/12/1996 12:00:00 AM
|
|
Not Processed Yet
|
1/1/0001 12:00:00 AM
|
Not Processed
|