where 子句中的日期返回 0 行
Date in where clause returning 0 rows
我正在尝试获取如下数据
WHERE DateCommande = '2018-09-05'
但它在我的电脑上不起作用。
SELECT *
FROM dbo.Commande;
Returns 行,包括在 datetime
列中将 2018-09-05
显示为日期时间值的行。
但是,在我计算机上的 SSMS 上,如果我添加一个 WHERE
子句,查询 returns 0 行:
SELECT *
FROM dbo.Commande
WHERE DateTimeColumn = '2018-09-05 00:00:00.000';
yyyy-mm-dd hh:mm:ss.000
不是 语言和区域 settings-safe 格式!
SELECT CONVERT(datetime, '2021-09-07');
SET LANGUAGE Nederlands;
SELECT CONVERT(datetime, '2021-09-07');
结果(db<>fiddle):
-----------------------
2021-09-07 00:00:00.000
-----------------------
2021-07-09 00:00:00.000
请使用 yyyy-mm-ddThh:mm:ss.000
- T 非常重要。所以:
WHERE DateCommande = '2018-09-05T00:00:00.000';
或者在您的情况下,可能只是更接近您问题中的内容,而不是屏幕截图中的内容:
WHERE DateCommande = '20180905'; -- YYYYMMDD *not* YYYY-MM-DD
但是除非您只想要那些没有时间的行,或者确定永远不会有与日期关联的时间(在这种情况下,为什么数据类型不是 date
?),否则两者都不会这些查询将是安全的。最好说:
WHERE DateCommande >= '20180905'
AND DateCommande < '20180906';
有关更多背景信息,请参阅此处标题为 Regional formats
的部分中的链接:
解决!感谢@Aaron Bertrand!
SET LANGUAGE us_english;
SELECT *
FROM BdCommerciale2.dbo.Commande
WHERE DateCommande = '2018-09-05';
我正在尝试获取如下数据
WHERE DateCommande = '2018-09-05'
但它在我的电脑上不起作用。
SELECT *
FROM dbo.Commande;
Returns 行,包括在 datetime
列中将 2018-09-05
显示为日期时间值的行。
但是,在我计算机上的 SSMS 上,如果我添加一个 WHERE
子句,查询 returns 0 行:
SELECT *
FROM dbo.Commande
WHERE DateTimeColumn = '2018-09-05 00:00:00.000';
yyyy-mm-dd hh:mm:ss.000
不是 语言和区域 settings-safe 格式!
SELECT CONVERT(datetime, '2021-09-07');
SET LANGUAGE Nederlands;
SELECT CONVERT(datetime, '2021-09-07');
结果(db<>fiddle):
-----------------------
2021-09-07 00:00:00.000
-----------------------
2021-07-09 00:00:00.000
请使用 yyyy-mm-ddThh:mm:ss.000
- T 非常重要。所以:
WHERE DateCommande = '2018-09-05T00:00:00.000';
或者在您的情况下,可能只是更接近您问题中的内容,而不是屏幕截图中的内容:
WHERE DateCommande = '20180905'; -- YYYYMMDD *not* YYYY-MM-DD
但是除非您只想要那些没有时间的行,或者确定永远不会有与日期关联的时间(在这种情况下,为什么数据类型不是 date
?),否则两者都不会这些查询将是安全的。最好说:
WHERE DateCommande >= '20180905'
AND DateCommande < '20180906';
有关更多背景信息,请参阅此处标题为 Regional formats
的部分中的链接:
解决!感谢@Aaron Bertrand!
SET LANGUAGE us_english;
SELECT *
FROM BdCommerciale2.dbo.Commande
WHERE DateCommande = '2018-09-05';