1

我需要您的帮助,因为我正在努力处理 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')

这也给出了 date 的'02/05/1990'结果'02/17/1990'。它只考虑月份和日期,而不是确切的年份。

4

3 回答 3

8

您应该比较日期而不是 varchar 值。如下更改您的 where 子句。另请注意,我在转换之前对字符串日期使用 ISO 格式 (yyyymmdd),以确保它适用于任何文化。

b.birthdate between convert(date,'20130201' ) and 
                  convert(date, '20130227')
于 2013-02-25T23:18:46.043 回答
2

我认为您正在比较字符串而不是日期时间,因此结果有记录“02/25”和“02/17”。

于 2013-02-25T23:18:07.157 回答
1

假设您的生日字段是DateTime您需要将输入转换为相同类型的类型。

你试过了吗?

WHERE (b.BirthDate BETWEEN Cast('02/01/2013' As DateTime) and Cast('02/27/2013' As DateTime))
于 2013-02-25T23:22:58.357 回答