Sql server 如何在SQL上获取交货日期状态?
使用T-SQL查询:Sql server 如何在SQL上获取交货日期状态?,sql-server,Sql Server,使用T-SQL查询: 如果发货交货日期为以下状态,如何获取该状态: a。准时交货 B提前交货 C迟交 如果custdate列为空,如何使用Proddate列进行案例查询 如何在使用case语句时将shipmentdate的datetime转换为date 我可以得到项目a和c的状态 DECLARE @tbl TABLE ( ID INT, ProdDate DATETIME,
B提前交货
C迟交
DECLARE @tbl TABLE
(
ID INT,
ProdDate DATETIME,
CustDate DATETIME,
ShipmentDate DATETIME
)
INSERT INTO @tbl (ID, Proddate, CustDate, ShipmentDate)
VALUES (1, '2018-04-11', '2018-04-14', '2018-04-13 14:48'),
(2, '2018-05-15', '2018-05-10', '2018-05-11 14:48'),
(3, '2018-05-15', '2018-05-16', '2018-05-16 14:48'),
(4, '2018-06-8', ' ', '2018-06-8 14:48'),
(5, '2018-04-11', '2018-04-14', '2018-04-13 14:48'),
(6, '2018-04-11', '2018-04-14', '2018-04-14 00:00')
SELECT
ID, proddate, custdate, shipmentdate,
CASE
WHEN custdate = shipmentdate THEN 'ON TIME'
WHEN custdate < shipmentdate THEN 'LATE'
END AS status
FROM
@tbl
我相信这是你正在寻找的两个功能。我正在打电话,请原谅我的打字错误
带有day参数的DATEDIFF将比较返回天数差整数的日期,如果它们是同一天,则返回0
COALESCE将返回第一个非空值。由于您的
ShipmentDate
包含日期和时间,您需要在比较之前转换为date
数据类型
同样对于ID 4,您为CustDate分配了一个空字符串。将其转换并作为1900-01-01
存储在表中。如果只存储NULL
,会更容易。否则,您需要在语句时使用大小写来检查1900-01-01
值或NULLIF()
。
因此,要基于数据处理此问题,可以使用isnull(nullif(CustDate,'1900-01-01'),ProdDate)
expression
CASE
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) > convert(date, ShipmentDate) then 'EARLY'
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) = convert(date, ShipmentDate) then 'ON TIME'
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) < convert(date, ShipmentDate) then 'LATE'
end as status
案例
当isnull(nullif(CustDate,'1900-01-01'),ProdDate)>convert(date,ShipmentDate)时,则为'EARLY'
当isnull(nullif(CustDate,'1900-01-01'),ProdDate)=转换(date,ShipmentDate)时,则为“准时”
当isnull(nullif(CustDate,'1900-01-01'),ProdDate)
您可以尝试以下查询
SELECT ID, proddate,custdate,shipmentdate,
CASE
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) = CONVERT(DATE,shipmentdate,101) then 'ON TIME'
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) < CONVERT(DATE,shipmentdate,101) then 'LATE'
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) > CONVERT(DATE,shipmentdate,101) then 'Early'
END AS STATUS
FROM @tbl
选择ID、proddate、custdate、shipmentdate、,
案例
当CONVERT(DATE,isnull(NULLIF(custdate.),ProdDate),101)=CONVERT(DATE,shipmentdate,101)时,则为“准时”
当CONVERT(DATE,isnull(NULLIF(custdate),ProdDate),101)CONVERT(DATE,shipmentdate,101)时,则为'Early'
以身份结束
来自@tbl
您好,您知道如何将此代码转换为excel或power BI吗?嘿@reborn,对不起,我在excel或power BI中不知道。
CASE
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) > convert(date, ShipmentDate) then 'EARLY'
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) = convert(date, ShipmentDate) then 'ON TIME'
WHEN isnull(nullif(CustDate, '1900-01-01'), ProdDate) < convert(date, ShipmentDate) then 'LATE'
end as status
SELECT ID, proddate,custdate,shipmentdate,
CASE
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) = CONVERT(DATE,shipmentdate,101) then 'ON TIME'
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) < CONVERT(DATE,shipmentdate,101) then 'LATE'
WHEN CONVERT(DATE,isnull(NULLIF(custdate,''),ProdDate),101) > CONVERT(DATE,shipmentdate,101) then 'Early'
END AS STATUS
FROM @tbl