Czemu TIMEDIFF zwraca ten sam wynik? Jakiś cache działa?

Czemu TIMEDIFF zwraca ten sam wynik? Jakiś cache działa?
Blackhole
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

Hej!
Mam zapytanie:

Kopiuj
SELECT grun_data AS d
      ,date(now()) as teraz_d
      ,TIME_TO_SEC(TIMEDIFF(date(now()), grun_data)) AS t_diff_s
  FROM grupy_nieobecne
 ORDER BY grun_data DESC;

Które zwraca dane:
screenshot-20241018201520.png
Ktoś może mi wyjaśnić, dlaczego trzecia kolumna ma stała wartość?

Blackhole
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

Dodam, iż w bazie kolumna grun_data jest typu DATE.

serek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1507
1

Co zwraca samo TIMEDIFF(date(now()), grun_data)?

A inne funkcje typu DATETIFF TIMESTAMPDIFF działają?

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2386
2

Najprawdopodobniej problem tkwi w różnicy typów danych.

Według dokumentacji MySQLa: https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_timediff

TIMEDIFF() returns expr1 − expr2 expressed as a time value. expr1 and expr2 are strings which are converted to TIME or DATETIME expressions; these must be of the same type following conversion. Returns NULL if expr1 or expr2 is NULL.

Czyli TIMEDIFF oczekuje dwóch argumentów typu string, które konwertowane są do TIME lub DATETIME. Jeśli podasz funkcji inne typy, np. DATE, MySQL spróbuje je skonwertować. W Twoim przykładzie:

date(now()) - jest typu DATE
grun_date - jest typu DATE

Zgodnie z dokumentacja TIMEDIFF, expr1 i expr2 są stringami, ale przekazujesz DATE, więc prawdopodobnie zachodzi konwersja z DATE do stringa, a następnie konwersja tegoż stringa do TIME.

Zerknij co się dzieje w takim zapytaniu:

Kopiuj
select 
	now() now1,
	date(now()) date1,
	cast(date(now()) as char) as string1,
    cast(cast(date(now()) as char) as time) time1
    ;

Zobacz jak zdefiniowany jest typ TIME: https://dev.mysql.com/doc/refman/8.4/en/time.html

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.