Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 10825|Odpowiedź: 0

[Źródło] Praktyczne sformułowanie SQL: estymacja daty

[Skopiuj link]
Opublikowano 26.11.2014 15:53:01 | | |

OGŁASZ @dt datę
USTAW @dt=GETDATE()

DEKLARUJ @number INT
SET @number=3

--1. Określ datę pierwszego lub ostatniego dnia roku
--A. Pierwszy dzień roku
SELECT Co nVERT(char(5),@dt,120)+ '1-1'

--B. Ostatni dzień roku
SELECT Co nVERT(char(5),@dt,120)+ '12-31'


--2. Pierwszy lub ostatni dzień kwartału, w którym znajduje się podana data
--A. Pierwszy dzień kwartału
SELECT Co nVERT(datetime,
Co nVERT(char(8),
DATEADD(Kilka razy,
DATEPART(Ćwierćdolarówka,@dt)*3-miesiąc nth(@dt)-2,
@dt),
120)+ '1 ')

--B. Ostatni dzień kwartału (wyrok SPRAWY)
SELECT Co nVERT(datetime,
Co nVERT(char(8),
DATEADD(Kilka razy,
DATEPART (Ćwierćdolarówka, @dt)*3-miesiąc nth(@dt),
@dt),
120)
+PRZYPADEK, GDY DATEPART(Kwartał,@dt) w(1,4)
POTEM '31 'ELSE '30' KONIEC)

--C. Ostatni dzień kwartału (algorytm bezpośredniego pushu)
WYBIERZ DATEADD(Dzień,-1,
Co nVERT(char(8),
DATEADD(Kilka razy,
1+DATEPART(Ćwierćdolarówka,@dt)*3-miesiąc n-ty(@dt),
@dt),
120)+ '1 ')


--3. Pierwszy lub ostatni dzień miesiąca, w którym znajduje się podana data
--A. Pierwszy dzień miesiąca
SELECT Co nVERT(datetime,Co nVERT(char(8),@dt,120)+ '1 ')

--B. Ostatni dzień miesiąca
SELECT DATEADD(Day,-1,Co nVERT(char(8),DATEADD(Mo nth,1,@dt),120)+ '1 ')

--C. Ostatni dzień miesiąca (łatwa do użycia zła metoda)
WYBIERZ DATEADD(Mo nth,1,DATEADD(Day,-DAY(@dt),@dt))


--4. Dowolny dzień tygodnia, w którym wyznaczona data jest
WYBIERZ DATEADD(Dzień,@number-DATEPART(Dzień powszednie,@dt,@dt)


--5. Każdy dzień tygodnia, w którym wyznaczona data jest
--A.  Niedziela jako pierwszy dzień tygodnia
WYBIERZ DATEADD(Dzień,@number-(DATEPART(Dzień powszednie,@dt)+@@DATEFIRST-1)%7,@dt)

--B.  Poniedziałek to pierwszy dzień tygodnia
WYBIERZ DATEADD(Dzień,@number-(DATEPART(Dzień roboczy,@dt)+@@DATEFIRST-2)%7-1,@dt)






Poprzedni:Problem z wykorzystaniem indeksu, gdy sqlserver obsługuje np. '%keyword%'
Następny:ORACLE 11g Nowe funkcje – Pozwala zamkom DDL czekać na zamki DML
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com