ChatGPT解决这个技术问题 Extra ChatGPT

如何在 SQL Server 中查询大于某个日期的所有日期?

我正在努力:

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;

A.Date 看起来像:2010-03-04 00:00:00.000

但是,这是行不通的。

任何人都可以提供参考为什么?

在它周围加上单引号
除了引号之外,我建议始终对仅日期字符串文字使用安全且明确的格式。我唯一信任的是 YYYYMMDD。请参阅我对大卫回答的评论,了解原因...

M
Malachi
select *  
from dbo.March2010 A 
where A.Date >= Convert(datetime, '2010-04-01' )

在您的查询中,2010-4-01 被视为数学表达式,因此本质上它是

select *  
from dbo.March2010 A 
where A.Date >= 2005; 

2010 minus 4 minus 1 is 2005 将其转换为正确的 datetime,并使用单引号将解决此问题。)

从技术上讲,解析器可能会让你侥幸逃脱

select *  
from dbo.March2010 A 
where A.Date >= '2010-04-01'

它会为您完成转换,但在我看来,它的可读性不如为您之后的维护程序员显式转换为 DateTime


显式转换不是必需的。此外,我强烈建议使用 YYYYMMDD 而不是 YYYY-MM-DD。为什么?好吧,用 SET LANGUAGE FRENCH 试试你的代码。 :-) 对于该日期,您将获得 1 月 4 日而不是 4 月 1 日。对于其他日期,您可能会收到错误消息。
@Aaron Bertrant - 我的回答确实包括不需要转换,从“从技术上讲,解析器可能会让你摆脱 。我只是觉得它更具可读性,因为很明显这是一个日期时间。太多的数据库系统将日期值存储在 varchar 字段中,但您对格式是正确的。通常,在使用转换时,我也会添加格式说明符,但我正在做我的示例头。
@AaronBertrand,我不得不将您的建议与上述答案结合使用:CONVERT(datetime, '20100401 10:01:01') - 传递 2010-04-01 在 SQL Server Management Studio 中有效,但在通过 PHP/MSSQL 发送 SQL 语句时无效。
我认为这是一个日期已经很清楚了,因此不需要转换。
我无法在 BigQuery 中使用 Convert(datetime, '2010-04-01' )。如果有人希望在 BigQuery 中执行大于日期的函数,您可以按照以下链接中提到的答案link
S
SliverNinja - MSFT

尝试将您的日期包含在字符串中。

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';

添加时间将给出准确的结果: where A.Date >= 2014-01-12 12:28:00
d
dush88c

我们也可以像下面这样使用

SELECT * 
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';

SELECT * 
    FROM dbo.March2010 A
    WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';

修改过滤谓词列无论如何都不是一个好主意。它几乎完全阻止了索引的使用。
w
whoami - fakeFaceTrueSoul

综上所述,正确答案是:

select * from db where Date >= '20100401'  (Format of date yyyymmdd)

这将避免其他语言系统的任何问题,并将使用索引。


M
Md. Tarikul Islam Soikot

在您的查询中,您没有在日期周围使用单引号。这就是问题所在。但是,您可以使用以下任何查询来比较日期

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= '2010-04-01';


SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= CAST('2010-04-01' as Date);


SELECT *  
FROM dbo.March2010 A 
WHERE A.Date >= Convert(datetime, '2010-04-01' )

S
Suresh Parmar
DateTime start1 = DateTime.Parse(txtDate.Text);

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

首先将 TexBox 转换为 Datetime 然后....将该变量用于查询


a
ahuemmer

日期格式对我没有问题(Mydate 的数据类型是 datetime):
Where Mydate>'10/25/2021'Where Mydate>'2021-10-25'
但如果添加时间,上述答案无效。
这是我的工作:
where cast(Mydate as time)>'22:00:00'
如果您的查询需要日期,请添加日期,例如:
where cast(Mydate as time)>'22:00:00' and Mydate='10/25/2021'