我正在尝试提出一个Select
语句,该语句将返回DATE
列减去DAYS
列中的天数。
这是我尝试过的查询:
SELECT
DATEADD(DAY, -+(REPLACE(ISNULL(DAYS,0), 'DAYS', '')), DATE)
FROM
T
它抛出一个错误
操作数数据类型varchar对减号运算符无效
请帮助。
答案 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