Віднімайте дні підрядки від дати

a

Я намагаюся створити оператор Select , який би повернув стовпець DATE мінус кількість днів у стовпці DAYS .

Це запит, який я спробував:

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

Він викидає помилку

Тип даних операнда varchar недійсний для оператора мінус

Будь ласка, допоможіть.

1
Що ви намагаєтеся зробити з "- +" перед REPLACE ?
додано Автор Tab Alleman, джерело

5 Відповіді

Функція DATEADD очікує ціле число для другого аргументу параметра.

Замінивши 'DAYS' пустим рядком, ви все одно залишитеся з varchar, що містить номер і пробіл, що знаходився між цим номером і словом "DAYS".

RTRIM цей результат і CAST це як Integer, і ви повинні бути добре йти.

Ох, і ви також повинні поставити , DATE всередині дужки DATEADD ().

1
додано
додано Автор Sami, джерело

Щось на зразок

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 )
0
додано

Я думаю, що вам потрібно отримати номер, віддати його до цілого числа як мінус і використовувати dateadd, як показано нижче:

SELECT dateadd(DAY,cast('-'+substring([DAYS], 1,charindex(' ',[DAYS])) as int),[DATE])
FROM T
0
додано
dateadd(day, -1*convert(int, coalesce(replace([DAYS], ' days', ''),'0')), [DATE])
0
додано

Ви можете використовувати це:

Використовуйте CHARINDEX , щоб отримати кількість днів і конвертувати в int і потім мінус з стовпця date

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