24:00:00 a nie 00:00:00 jak?

0

Dzień dobry,
Taka sytuacja
Data początkowa to 2022-07-17 0000.000
Data końcowa to 2022-07-18 0000.000

Różnica 0000 - a to nieprawda 😊
Jak uzyskać wynik 2400
Dziękuję bardzo za informację 😊

Jak robione:
cast(tach.DATACZAS_DO - tach.DATACZAS_OD as time) as 'godzin',
convert(char, (DATEDIFF(hour,TACH.DATACZAS_OD,TACH.DATACZAS_DO) + DATEDIFF(minute,TACH.DATACZAS_OD,TACH.DATACZAS_DO) + DATEDIFF(SECOND,TACH.DATACZAS_OD,TACH.DATACZAS_DO)),120),
CONVERT(Char,TACH.DATACZAS_DO -TACH.DATACZAS_OD ,108),

i zipa dumna ;)

screenshot-20220720124158.png

2

Raczej bym szukał do 2359.999
2400 jest zarazem 0000 - to ten sam czas :D
Albo do 0000 następnego dnia.

0

Nie można sprawdzić też i dni? Jak masz 0000 to sprawdź dni

2

Super: w pytaniu zadajesz pytanie o róznicę pomiędzy 2022-07-17 00:00:00.000 a 2022-07-18 00:00:00.000

Sprawdzam:

select datediff(hour, '2022-07-17 00:00:00.000','2022-07-18 00:00:00.000')

wychodzi: 24

Gdzie jest problem?

Fajnie że wklejasz jakiś screen (przy okazji nie rób tego),

Ale na nim nie widzimy całego wyrażenia, jak i dat które odejmujesz.

0

Dodatkowy problem może sprawiać sama kontrolka (grid) wizualizująca wynikowy zestaw danych, która czas 2400 może interpretować modulo 24 i stąd wychodzi '0000';
Wykonałem mały test w Delphi z komponentem DBgrid, który potwierdził tę tezę

procedure TForm3.Button1Click(Sender: TObject);
var
  d1: tdatetime;
  d2: tdatetime;
begin
  self.ClientDataSet1.FieldDefs.Add('time', ftTime);
  self.ClientDataSet1.CreateDataSet;
  d1 := encodedatetime(2022, 07, 21, 16, 0, 0, 0);
  d2 := encodedatetime(2022, 07, 22, 16, 0, 0, 0);
  self.ClientDataSet1.Append;
  self.ClientDataSet1.FieldByName('time').AsDateTime := d2 - d1;
  self.ClientDataSet1.Post;
  self.DataSource1.DataSet := self.ClientDataSet1;
  self.DBGrid1.DataSource := self.DataSource1;

end;
0

Zapewniam cię że SQL serwer zwróci 0, ponieważ typ time dla godzin ma wartości 0-23, więc convert z parametrem 108 nie pokaże wartości większych od 23 w godzinie.

Pozostaje samodzielne napisanie funkcji, która to robi, lub poszukanie gotowca w necie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1