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