簡體   English   中英

SQL Server 2012:比較和減去聯接中的日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM