繁体   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