从日期中减去子字符串天

时间:2018-10-23 19:33:31

标签: sql sql-server datetime

a

我正在尝试提出一个Select语句,该语句将返回DATE列减去DAYS列中的天数。

这是我尝试过的查询:

SELECT 
    DATEADD(DAY, -+(REPLACE(ISNULL(DAYS,0), 'DAYS', '')), DATE) 
FROM
    T

它抛出一个错误

  

操作数数据类型varchar对减号运算符无效

请帮助。

5 个答案:

答案 0 :(得分:2)

类似

DECLARE
       @Days VARCHAR(25) = '23 DAYS',
       @Date DATE = '2018-10-23';

SELECT DATEADD(Day, - CAST(REPLACE(@Days , 'DAYS', '') AS INT), @Date )

如果您使用的是SQL Server 2012 +

SELECT DATEADD(Day, - ISNULL(TRY_CAST(REPLACE(@Days , 'DAYS', '') AS INT), 0), @Date )

答案 1 :(得分:1)

DATEADD函数的第二个参数参数期望一个整数。

通过用空字符串替换'DAYS',您仍然留下了一个varchar,其中包含一个数字以及该数字与单词“ DAYS”之间的空格。

RTRIM此结果并将其作为整数进行投射,那么您应该一切顺利。

哦,您还需要将,DATE放在DATEADD()的括号内。

答案 2 :(得分:1)

dateadd(day, -1*convert(int, coalesce(replace([DAYS], ' days', ''),'0')), [DATE])

答案 3 :(得分:1)

我认为您需要获取数字,将其转换为负数并使用dateadd,如下所示:

SELECT dateadd(DAY,cast('-'+substring([DAYS], 1,charindex(' ',[DAYS])) as int),[DATE])
FROM T

答案 4 :(得分:1)

您可以使用此:

使用CHARINDEX获得天数并转换为int 然后从minus列中date

select DATEADD(DAY,-CAST(SUBSTRING(days,1,CHARINDEX(' ',days)) AS INT),DATE),* from #table