我想获得最近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数据类型的转换导致值超出范围。
答案 0 :(得分:0)
将值转换为日期,而不是字符串!
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()));
然后,您可以修复表中的数据。不要将日期存储为字符串。使用本机类型存储它们。