trešdiena, 2010. gada 22. septembris

Kura nedēļas diena?

Lai noskaidrotu kura nedēļas diena ir šodien, ir jāizmanto funkcija datepart(). Viss būtu skaisti, ja vien visā pasaulē pirmā nedēļas diena būtu pirmdiena. Problēmas garāks skaidrojums un risinājums turpinājumā.

Raksta tapšanas laikā ir trešdiena. Izpildot Select DatePart(dw, getdate()) iegūstu rezultātu "4", lai arī ir 3. nedēļas diena pēc Latvijas standartiem:
Ko darīt? Viens risinājums ir izmantot Set DateFirst:


Bet šis uzstādījums strādās tikai konkrētās konekcijas darbības laikā.

Problēmas cēlonis savukārt ir tas, ka SQL Server iestatījumos ir norādīts English kā noklusētā kultūra (Management studio- labā poga uz servera nosaukuma, properties-> advanced):
Līdz ar to veidojot jaunu lietotāju, arī tam pēc noklusējuma noklusētā kultūra ir English:
Ja, veidojot jaunu lietotāju, norādīs "Latvian" (vai arī kā servera noklusēto uzstādījumu uzliks noklusēto valodu "Latvian"), tad lietotājiem pirmā nedēļas diena arī būs 1 (pirmdiena).

Protams, arī eksistējošiem lietotājiem var nomainīt noklusēto valodu (Management studio-> Serveris-> Security-> Logins un tad atbilstošais pieteikumvārds).

2 komentāri:

  1. vēl jau var
    select (@@DATEFIRST+DATEPART(WEEKDAY,getdate()))%7
    kas nu galīgi nav atkarīgs no set date first, kas var aizmirst uzlikties, ir pat gadījies.
    Vienīgais,kas ir neērti, ka pirmdiena =2 , setdiena = 0 un svētdiena =1

    P.S Microsoft un normāla datumu apstrāde in nepavienojamas lietas.

    AtbildētDzēst
  2. Super ideja!
    To ka neērti varbūt var risināt šitā:
    Select (6+@@DATEFIRST+DATEPART(WEEKDAY,getdate()))%7

    AtbildētDzēst