Tarixdan pastki satrlarni olib tashlash

a

DATE ustuni DAYS ustunidagi kunlar sonini qaytaradigan Select iborasi bilan ishlashga harakat qilaman.

Bu harakat qilayotgan so'rov:

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

Xatolik yuzaga keladi

Operatorning ma'lumotlar turi varchar operatorining minus operatori uchun yaroqsiz.

Iltimos yordam bering.

1
REPLACE oldidan "- +" bilan nima qilish kerak?
qo'shib qo'ydi muallif Tab Alleman, manba

5 javoblar

DATEADD funktsiyasi ikkinchi parametr argumenti uchun tamsayıni kutadi.

"KUNLARNI" BIR mag'lubiyat bilan almashtirish bilan siz hali ham raqam va "DAYS" so'zi orasidagi bo'sh joyni o'z ichiga olgan varchar bilan qoldirasiz.

RTRIM ushbu natijani qabul qildi va uni Integer sifatida qabul qildi va siz borishingiz kerak.

Oh, shuningdek DATEADD() ning parentezi ichidagi , DATE ni qo'yishingiz kerak.

1
qo'shib qo'ydi
qo'shib qo'ydi muallif Sami, manba

Bir narsa

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

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

SQL Server 2012+ dan foydalanayotgan bo'lsangiz

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

Raqamni olishingiz kerak, deb o'ylayman, uni salbiy sifatida aniqlang va quyida keltirilgan sana bilan foydalaning:

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

Buni foydalanishingiz mumkin:

Kun sonini olish va int ga aylantirish uchun CHARINDEX sana ustunidan minus ni bosing

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