[英]SQL Server 2012: compare and subtract dates in join
我想獲取最近30天內的此聯接查詢的結果。
V.[4501001]
包含格式為dd/mm/yyyy
的nvarchar日期
這是我的查詢:
(select Distinct T.PId from [dbo].[TrialStatus] T inner join
form.TP_VISDATE V on T.pid = V.pid
where T.cid = 1064 and T.sid = 300 and (Convert(NVARCHAR, V.[4501001], 103) < Convert(NVARCHAR,GETDATE(),103)) and (Convert(NVARCHAR, V.[4501001], 103) > DATEADD(DD,-30,Convert(NVARCHAR,GETDATE(),103))))
如果我使用Convert(NVARCHAR,GETDATE(),103)
我會得到錯誤的結果,因為這
select DATEADD(Day,-30,Convert(NVARCHAR,GETDATE(),103))
返回2018-01-08 00:00:00.000
而不是今天前30天
但是,如果我按原樣使用GETDATE()
而不進行轉換,則會出現此錯誤:
從nvarchar數據類型到datetime數據類型的轉換導致值超出范圍。
將值轉換為日期,而不是字符串!
select Distinct T.PId
from [dbo].[TrialStatus] T inner join
form.TP_VISDATE V
on T.pid = V.pid
where T.cid = 1064 and
T.sid = 300 and
Convert(date, V.[4501001], 103) < Convert(date, GETDATE()) and
Convert(date, V.[4501001], 103) > DATEADD(day, -30, Convert(date, GETDATE()));
然后,您可以修復表中的數據。 不要將日期存儲為字符串。 使用本機類型存儲它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.