【发布时间】:2012-07-12 06:10:29
【问题描述】:
我有一张像这样的表(例如tableA):
|姓名 |开始日期 |结束日期 | |----------------------------------| |一个 | 2012-07-01 | 2013-06-30 | |乙 | 2011-05-01 | 2012-04-30 | | c | 2010-01-01 | 2013-12-31 | | d | 2013-01-01 | 2014-12-31 | |电子| 2011-07-01 | 2012-06-30 |我想从2012-05-01 和2012-10-31 之间活动的表中获取一个名称。从上表中得出的结果应该是 a,c 和 e。
我所做的如下:
SELECT Name FROM tableA WHERE startdate<='2012-05-01' AND enddate>='2012-10-31'
但我没有得到正确的结果。
【问题讨论】:
-
右边应该是:startdate>='2012-05-01' AND enddate
-
您想要在整个期间有效的结果吗?
-
你应该使用正确的、独立于语言的格式来指定
DATETIME的日期 - 格式是yyyyMMdd- 所以试试:...WHERE startdate <= '20120501' AND enddate >= '20121031'。带有破折号的格式不安全,并且可能会根据您的 SQL Server 的语言设置而被误解。另外,您的比较运算符也应该反转 - 它应该大于或等于20120501并且小于或等于20121031- 对吧? -
因为没有人在他们的任何答案中提到它——最好避免将日期(没有时间)指定为
YYYY-MM-DD——它们对 SQL Server 来说可能是模棱两可的。最好只使用不带分隔符的YYYYMMDD。 -
@marc_s 和 @Damien_The_Unbeliever 对,我将使用
yyyyMMDD
标签: sql sql-server select select-query