SQL-serverda oyni qanday qilib topish mumkin?

Qanday qilib oyni differentsiyani (yanvar, fevral, mart va hk) belgilash mumkin?

Misol uchun, o'zgaruvchiga ega declare @month varchar (20) = 'may' ; va DATEDIFF (oy, oy (getdate ()), @month) ni tanlang 7 oktyabr va may oylari o'rtasidagi farq).

1
Men ta'qib qilmayman; 10 oylik oy qanday qilib 5 = 7 bo'lishi mumkin?
qo'shib qo'ydi muallif UnhandledExcepSean, manba
Agar qiymatlar May 2020 va Oktyabr 2018 bo'lsa, qanday natijaga erishasiz?
qo'shib qo'ydi muallif Oto Shavadze, manba
farqli b/w oktyabr va may oylari 7 yoki 5 bo'lishi kerak?
qo'shib qo'ydi muallif Mayank Porwal, manba
Salom Dalian, ular orasidagi farqni talab qilyapsizmi yoki oyni aniq raqamga aylantirish kerakmi?
qo'shib qo'ydi muallif Birel, manba
Yoki sizning savolingizni tushunib etgandek, siz ikki oy orasidagi farqni aniq raqam sifatida aniqlaysizmi?
qo'shib qo'ydi muallif Birel, manba
Men 7 (orqaga) degan ma'noni bildirdim. May 2019 - oktyabr 2018 = 7.
qo'shib qo'ydi muallif Dalian, manba
@Birel Ha. Natijada butun raqamga kerak.
qo'shib qo'ydi muallif Dalian, manba

6 javoblar

SQL Serverda datediff() dan foydalanasiz:

select datediff(month, '2010-01-15', '2011-02-28')

Bu ikki sanadan o'rtasidagi oylik chegaralarni hisobga oladi. Bu sizning savolingizni oqilona talqin qilish kabi ko'rinadi.

2
qo'shib qo'ydi
Oy nomlari stringda.
qo'shib qo'ydi muallif Dalian, manba
Declare @M1 varchar(25) = 'October'
Declare @M2 varchar(25) = 'May'

Select DateDiff(MONTH,@M1+' 01 1980',@M2+' 01 1980')
       +case when DateDiff(MONTH,@M1+' 01 1980',@M2+' 01 1980')<0 then 12 else 0 end

qaytaradi 7

1
qo'shib qo'ydi
DECLARE @M1 as varchar(20) = 'October';
DECLARE @M2 as varchar(20) = 'May';

SELECT ABS(datediff(mm,
                    convert(datetime, @M1 + ' 1 2012 11:01AM', 100),
                    convert(datetime, @M2 + ' 1 2012 11:01AM', 100) 
                    )
        );

bu siz ilgari eslatib o'tmagan yillarga ruxsat bermaydi

1
qo'shib qo'ydi

Input1, input2 ni tanlasangiz, u erda siz:

declare @input1 nvarchar(max)='October'
declare @input2 nvarchar(max)='May'

select 
    case 
        when DATEPART(MM,@input1+' 01 2011')>DATEPART(MM,@input2+' 01 2011') 
            then 12 
        else 0
    end-DATEPART(MM,@input1+' 01 2011')+DATEPART(MM,@input2+' 01 2011')
1
qo'shib qo'ydi
Bu g'alati, sayt parseri END ni inkor etmoqda.
qo'shib qo'ydi muallif George Menoutis, manba
@Dalian, menimcha, Jorj sizga izlayotgan javobni berdi.
qo'shib qo'ydi muallif Birel, manba

buni sinab ko'ring

select  DATEPART(MM,'march 01 2011') - DATEPART(MM,'january 01 2011')
0
qo'shib qo'ydi

Siz nima qilayotganingizni bilmayapsiz, lekin shunga o'xshash narsa ishlashi mumkin:

select MONTH(STR_TO_DATE('October', '%M')) - MONTH(STR_TO_DATE('May', '%M')) -- returns 5
0
qo'shib qo'ydi