【问题标题】:Subtract substring days from date从日期中减去子字符串天数
【发布时间】:2018-10-23 19:33:30
【问题描述】:
我试图提出一个Select 语句,它将返回DATE 列减去DAYS 列中的天数。
这是我尝试过的查询:
SELECT
DATEADD(DAY, -+(REPLACE(ISNULL(DAYS,0), 'DAYS', '')), DATE)
FROM
T
会报错
操作数数据类型 varchar 对减号运算符无效
【问题讨论】:
标签:
sql
sql-server
datetime
【解决方案1】:
dateadd(day, -1*convert(int, coalesce(replace([DAYS], ' days', ''),'0')), [DATE])
【解决方案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 )
【解决方案3】:
我认为您需要获取数字,将其转换为整数作为负数并使用 dateadd,如下所示:
SELECT dateadd(DAY,cast('-'+substring([DAYS], 1,charindex(' ',[DAYS])) as int),[DATE])
FROM T
【解决方案4】:
你可以用这个:
使用CHARINDEX 获取天数并转换为int
然后minus它来自date列
select DATEADD(DAY,-CAST(SUBSTRING(days,1,CHARINDEX(' ',days)) AS INT),DATE),* from #table
【解决方案5】:
DATEADD 函数的第二个参数参数需要一个整数。
通过将“DAYS”替换为空字符串,您仍然会得到一个varchar,其中包含一个数字以及该数字与单词“DAYS”之间的空格。
RTRIM 这个结果和CAST 它是一个Integer,你应该很高兴。
哦,您还需要将,DATE 放在DATEADD() 的括号内。