Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Śledzenie zaplanowanych zmian w programie SQL Server w zależności od dnia

Poniżej przedstawiamy tabelę zmian. Nie jest do końca jasne, co chcesz zrobić, ale powinieneś być w stanie przeprowadzić inżynierię wsteczną, określając przesunięcie od daty/czasu zdarzenia, korzystając z niektórych przedstawionych tutaj obliczeń.

EDYTUJ :Poprawiono case do obsługi wzoru 2/2/3/2.

; with Samples as (
  -- Start at the beginning of 2013.
  select Cast( '01-01-2013 00:00' as DateTime ) as Sample
  union all
  -- Add hours up to the desired end date.
  select DateAdd( hour, 1, Sample )
    from Samples
    where Sample <= '2013-01-30'
  ),
  ExtendedSamples as (
  -- Calculate the number of days since the beginning of the first shift on 1/1/2013.
  select Sample, DateDiff( hour, '01-01-2013 07:00', Sample ) / 24 as Days
    from Samples ),
  Shifts as (
  -- Calculate the shifts for each day.
  select *,
    case when ( Days + 1 ) % 9 in ( 0, 1, 4, 5 ) then 'C/D' else 'A/B' end as Shifts
    from ExtendedSamples )
  select *,
    case when DatePart( hour, Sample ) between 7 and 18 then Substring( Shifts, 1, 1 ) else Substring( Shifts, 3, 1 ) end as Shift
    from Shifts
    option ( maxrecursion 0 )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonywanie różnych podejść do danych opartych na czasie

  2. Dlaczego wykonywanie procedur składowanych jest szybsze niż zapytanie SQL ze skryptu?

  3. Jak przypisać wynik exec do zmiennej sql?

  4. Pobierz wszystko po i przed określonym znakiem w SQL Server

  5. Co to jest „identyfikator wieloczęściowy” i dlaczego nie można go powiązać?