wystepowanie dat

RC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 74
0

Witam, mam tabele która zawiera id, imie, nazwisko, data poczatkowa, data koncowa. Czy ktos moglby podrzucic pomysl jak napisac zapytanie ktore zwroci mi tylko te rekordy (cale wiersze) gdzie wystepuje jakas konkretna data? Np. jezeli mam rekordy:

  • 1 , Jan, Nowak, 2019-05-05, 2019-06-01
  • 2, Piotr, Kowal, 2018-09-10, 2019-04-05
  • 3, Janina, Kowalska, 2019-05-29, 2019-09-01

i np konkretna data : 2019-05-30
to zeby zwrociło mi:

  • 1 , Jan, Nowak, 2019-05-05, 2019-06-01
  • 3, Janina, Kowalska, 2019-05-29, 2019-09-01

ponieważ miedzy tymi datami wystepuje ta konkretna.
Ktoś pomoże?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
1
Kopiuj
select * fro tabela where '2019-05-30' between data_poczatkowa and data_koncowa
RC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 74
0

a jak zrobić powyższy przykład wtedy gdy jest jakiś przedział czasowy podany zamiast konkretnej daty?
mam coś takiego

Kopiuj
declare @data as date   
declare @sec_data as date
set @data = '2019-04-30'
set @sec_data = '2019-05-22'
while @data <= @sec_data                       
begin
	
	select * from tabela where @data between data_od and data_do
	
 set @data = DATEADD(D, 1, @data)	 
end

jednak powtarzają się rekordy i wyświetla mi też puste rekordy, jak mogę usunąć puste oraz te które się powtarzają?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

Nadal pętla jest niepotrzebna, wystarczy alternatywa:

Kopiuj
Select * from tabela 
where
 @data between data_poczatkowa and data_koncowa 
Or
 @sec_data between data_poczatkowa and data_koncowa
RC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 74
0

ale zakladajac ze
1 , Jan, Nowak, 2019-05-05, 2019-06-01
2, Piotr, Kowal, 2019-09-10, 2019-04-05
3, Janina, Kowalska, 2019-05-29, 2019-09-01

a
set @data = '2019-01-30'
set @sec_data = '2019-11-22'

to ani @data ani @sec_data nie mieszczą się w przedziałach żadnych pracowników a okres między tymi datami np '2019-05-30' już występuje i wtedy powinno wyświetlić

1 , Jan, Nowak, 2019-05-05, 2019-06-01

a zależy mi żeby sprawdziło okres między dwoma podanymi datami i sprawdziło czy którakolwiek data występuje w którymś rekordzie

da się coś takiego?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
1
Kopiuj
Select * from tabela 
where
 @data between data_poczatkowa and data_koncowa 
Or
 @sec_data between data_poczatkowa and data_koncowa
Or
Data_poczatkowa between @data and @sec_data
Or
Data_koncowa between @data and @sec_data
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
2
Kopiuj
Select * from tabela 
where
@data<data_koncowa and @sec_data>data_poczatkowa

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.