TIME_FORMAT в MySQL
6 отговора
186 прегледа
TIME_FORMAT в MySQL
някой може ли да ми обясни защо следния израз вместо очаквания резултат връча НИЩО:
SELECT TIME_FORMAT(sum(duration),'%H:%i:%s') AS duration FROM logdata
където полето duration е от тип time
SELECT TIME_FORMAT(sum(duration),'%H:%i:%s') AS duration FROM logdata
където полето duration е от тип time
Re: TIME_FORMAT в MySQL
А какъв е "очаквания резултат" ?
SUM() връща тип integer TIME_FORMAT() иска тип TIME
SUM() не е дефинирано за тип TIME или по-точно казано като предаваш TIME на SUM() (а и на всички други функции) се преобразува първо до стринг а после до число и ......
На теб просто ти трябва комбинация от SEC_TO_TIME() и TIME_TO_SEC()
Пробвай:
SELECT SUM(duration) as StrangeSum, SUM(TIME_TO_SEC(duration)) as Seconds, SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) as GoodSum FROM logdata;
salle.online.bg/sig
SUM() връща тип integer TIME_FORMAT() иска тип TIME
SUM() не е дефинирано за тип TIME или по-точно казано като предаваш TIME на SUM() (а и на всички други функции) се преобразува първо до стринг а после до число и ......
На теб просто ти трябва комбинация от SEC_TO_TIME() и TIME_TO_SEC()
Пробвай:
SELECT SUM(duration) as StrangeSum, SUM(TIME_TO_SEC(duration)) as Seconds, SEC_TO_TIME(SUM(TIME_TO_SEC(duration))) as GoodSum FROM logdata;
salle.online.bg/sig
Редактирано от salle на
Re: TIME_FORMAT в MySQL
ааа, ясно. а аз бях останал с впечатлението, че числото което връща SUM() е TIME във контекста на число.
Re: TIME_FORMAT в MySQL
А откъде си останал с такова впечатление????
Няма къде да го прочетеш а ако го пробваш ще видиш, че изобщо не прилича на часове минути и секунди.
Та въпросът ми е защо почваш питането си със "очаквания" резултат?
Откъде тези очаквания?
Наистина не разбирам.
salle.online.bg/sig
Няма къде да го прочетеш а ако го пробваш ще видиш, че изобщо не прилича на часове минути и секунди.
Та въпросът ми е защо почваш питането си със "очаквания" резултат?
Откъде тези очаквания?
Наистина не разбирам.
salle.online.bg/sig
Re: TIME_FORMAT в MySQL
ми стори ми се логично сумата от времена пак да е време и не си направих труда да проверя дали е така :-) а като получа четирицифрено число, реших че е време без разделителите, както MySQL представя дати и времена, когато прави с тях аритметични операции.
Re: TIME_FORMAT в MySQL
И да и не ....
Когато 19:43:56 се използва в цифров контекст се преобразува до 194356
Само, че това не е "аритметична операция" - това е резултат от "преобразуване на тип"
Правилото за преобразуване на Date/Time тип до число е да се махнат всички разделители. Причината е проста - полученото число може да се сравнява директно с =, !=, >, <
19:00:00 > 18:52:00 -> 1 защото 190000 > 185200
Сам разбираш обаче, че няма особен смисъл от аритметични операции върху тези две числа.
Така, че внимавай в какъв контекст използваш TIME (а и другите типове) като символен низ, Число или TIME
Демонстрация:
mysql> select curtime() as Type_TIME, curtime()+0 as Type_INT, concat(curtime()) as Type_CHAR, concat(curtime())+0 as Type_CHAR_to_INT;
+-----------+----------+-----------+------------------+
| Type_TIME | Type_INT | Type_CHAR | Type_CHAR_to_INT |
+-----------+----------+-----------+------------------+
| 19:50:14 | 195014 | 19:50:14 | 19 |
+-----------+----------+-----------+------------------+
Или иначе казано TIME 19:50:14 конвертирано до число е 195014, а CHAR '19:50:14' конвертирано до число е 19
Наздраве :)
salle.online.bg/sig
Когато 19:43:56 се използва в цифров контекст се преобразува до 194356
Само, че това не е "аритметична операция" - това е резултат от "преобразуване на тип"
Правилото за преобразуване на Date/Time тип до число е да се махнат всички разделители. Причината е проста - полученото число може да се сравнява директно с =, !=, >, <
19:00:00 > 18:52:00 -> 1 защото 190000 > 185200
Сам разбираш обаче, че няма особен смисъл от аритметични операции върху тези две числа.
Така, че внимавай в какъв контекст използваш TIME (а и другите типове) като символен низ, Число или TIME
Демонстрация:
mysql> select curtime() as Type_TIME, curtime()+0 as Type_INT, concat(curtime()) as Type_CHAR, concat(curtime())+0 as Type_CHAR_to_INT;
+-----------+----------+-----------+------------------+
| Type_TIME | Type_INT | Type_CHAR | Type_CHAR_to_INT |
+-----------+----------+-----------+------------------+
| 19:50:14 | 195014 | 19:50:14 | 19 |
+-----------+----------+-----------+------------------+
Или иначе казано TIME 19:50:14 конвертирано до число е 195014, а CHAR '19:50:14' конвертирано до число е 19
Наздраве :)
salle.online.bg/sig
Re: TIME_FORMAT в MySQL
ммм да, част от това вече бях схванал, т.е. че 15:40:00=15:20:00+2000
както и да е, сега вече съм наясно и с времената => съм по-умничъъъъкккк :-)
както и да е, сега вече съм наясно и с времената => съм по-умничъъъъкккк :-)