我想:如何在SQL Server中查询大于特定日期的所有日期?
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
样子:2010-03-04 00:00:00.000
但是,这是行不通的。任何人都可以提供一个参考为什么?
我想:如何在SQL Server中查询大于特定日期的所有日期?
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
样子:2010-03-04 00:00:00.000
但是,这是行不通的。任何人都可以提供一个参考为什么?
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 - 我的答案确实包括了转换不是必须的,从“从技术上讲,pareser可能让你逃避
@AaronBertrand,我不得不使用你的建议与上述答案结合:'CONVERT(datetime,'20100401 10:01:01')' - 传递2010-04-01在SQL Server Management Studio中工作,但不当通过PHP/MSSQL发送SQL语句时 – paperclip
试着把你的日期放入一个字符串中。
select *
from dbo.March2010 A
where A.Date >= '2010-04-01';
添加时间会给出确切的结果:其中A.Date> = 2014-01-12 12:28:00 – stom
DateTime start1 = DateTime.Parse(txtDate.Text);
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= start1;
先转换成TexBox日期时间,然后....使用该变量到查询
我们可以使用如下以及
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';
修改过滤器谓词列不是一个好主意,它几乎可以完全防止索引使用。 – pimbrouwers
把单引号周围 –
除引号,我建议您始终使用安全且明确的格式来保存仅限日期的字符串文字。我唯一信任的是YYYYMMDD。看到我的评论,大卫的答案为什么...... –