【发布时间】:2013-02-11 06:25:11
【问题描述】:
我需要您的帮助,因为我正在努力处理 SQL 中的查询。这个查询没有给出我想要的确切结果。我需要提取两个日期之间的所有日期。
我尝试了两个查询:
SELECT a.MemberID,CONVERT(varchar(12), b.BirthDate, 101) AS BirthDate
FROM Members_Hired AS a
INNER JOIN Members AS b
ON a.ReferenceID = b.RecordID
WHERE (CONVERT(varchar(12), b.BirthDate, 101) >= '02/01/2013'
and CONVERT(varchar(12), b.BirthDate, 101) <= '02/27/2013')
和
SELECT a.MemberID,CONVERT(varchar(12), b.BirthDate, 101) AS BirthDate
FROM Members_Hired AS a
INNER JOIN Members AS b
ON a.ReferenceID = b.RecordID
WHERE (CONVERT(varchar(12), b.BirthDate, 101) BETWEEN '02/01/2013' and '02/27/2013')
这也会给出日期为'02/05/1990'、'02/17/1990' 的结果。它只考虑月份和日期,而不是确切的年份。
【问题讨论】:
-
不会是 1990 年吗?
-
如果你在比较日期,你必须把它倒过来,所以先是 yyyy,然后是 mm,然后是 dd。如果birthdate 是一个日期字段,您可以使用 to_char(b.birthdate,'yyyy-mm-dd') 将其转换 - 这将是 Oracle 语法,但这就是为什么我将其作为评论而不是答案发布的原因
-
b.BirthDate 是什么类型?是日期、日期时间还是其他?
-
虽然给出的答案是关于使用日期/时间类型进行比较的正确答案,但它们都遗漏了一件事 - they shouldn't be using BETWEEN (especially on SQL Server)。其他任何事情都是错误的时间思考方式......
标签: sql sql-server sql-server-2008