Адніманне падрадка дзён з даты

a

Я спрабую прыдумаць Выбраць зацвярджэнне, што верне DATE слупок мінус колькасць дзён у ДЗЁН калонкі.

Гэта запыт, я паспрабаваў:

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

Ён выдае памылку

<�Р> аперанда тып дадзеных VARCHAR недапушчальны для аператара мінус

Калі ласка, дапамажыце.

1
Што вы спрабуеце зрабіць з «- +» да REPLACE ?
дададзена аўтар Tab Alleman, крыніца

5 адказы

Функцыя DATEADD чакае цэлы лік для свайго другога параметру аргументу.

Па замена «ДНІ» з пустым радком, вы ўсё яшчэ застаецца з VARCHAR, які змяшчае нумар і пустое прастору, якое было паміж гэтым лікам і словам «ДНІ».

RTrim гэтага выніку і CAST яго як цэлае, і вы павінны быць добра ісці.

О, і вы таксама павінны змясціць , 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 а затым мінус гэта з дата калонкі

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