我想tomake一个在数据库中选择两个特定日期之间加入
这是我feelis在正确的道路上,但是是不正确
我怎样才能得到这个工作
SELECT --RTRIM(C.CustomerFirstName) + ' ' + LTRIM(C.CustomerLastName) as CustomerFullName,
ROW_NUMBER() OVER(ORDER BY CP.ActionDate) AS RowNumber,
C.CustomerFirstName,
C.CustomerLastName,
C.CustomerCompany,
C.CustomerPosition,
C.CustomerCountry,
C.CustomerProvince,
C.CustomerContact,
CP.ActionDate,
CP.ProductCode,
CP.CustomerEmail
FROM tblCustomers C
JOIN tblCustomerProducts CP
ON C.CustomerEmail = CP.CustomerEmail
ORDER BY ActionDate DESC
WHERE CP.ActionDate BETWEEN '1/17/2013' AND '19/12/2012'
代替
WHERE CP.ActionDate BETWEEN '1/17/2013' AND '19/12/2012`
尝试这个:
WHERE CP.ActionDate BETWEEN '19/12/2012' AND '1/17/2013'
需要注意的是:这是因为BETWEEN
谓词在SQL Server是不对称的 ,这意味着value1 BETWEEN value2 AND value3
是相同的Value1 >= Value2 AND Value1 <= Value3
,因此该值value2
,之前AND
必须小于或等于value3
。
较小的日期必须首先上市
BETWEEN '12/19/2012' AND '1/17/2013'
没有任何与您当前查询的几个问题。
首先,你必须以错误的顺序的日期。
其次,你有ORDER BY
在错误的地方。 该ORDER BY
是在你的选择中列出的最后一项:
FROM tblCustomers C
JOIN tblCustomerProducts CP
ON C.CustomerEmail = CP.CustomerEmail
WHERE CP.ActionDate BETWEEN '12/19/2012' AND '1/17/2013'
ORDER BY ActionDate DESC
你也可以使用:
FROM tblCustomers C
JOIN tblCustomerProducts CP
ON C.CustomerEmail = CP.CustomerEmail
WHERE CP.ActionDate >= '12/19/2012' AND CP.ActionDate <= '1/17/2013'
ORDER BY ActionDate DESC
我也建议你肯定的是,日期相同的方式格式化。 你有一个为DD/MM/YYYY
,另一个为MM/DD/YYYY
你放错地方的日期,它应该是在第二次发生在首位较小和较大的一个:
WHERE CP.ActionDate BETWEEN '19/12/2012' AND '1/17/2013'
要么
WHERE CP.ActionDate >= '19/12/2012' AND CP.ActionDate <= '1/17/2013'