TIME_FORMAT в MySQL

6 отговора 186 прегледа
#1

TIME_FORMAT в MySQL

някой може ли да ми обясни защо следния израз вместо очаквания резултат връча НИЩО:

SELECT TIME_FORMAT(sum(duration),'%H:%i:%s') AS duration FROM logdata

където полето duration е от тип time

Отговор
в отговор на gonzales #2

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

Редактирано от salle на

Отговор
в отговор на salle #3

Re: TIME_FORMAT в MySQL

ааа, ясно. а аз бях останал с впечатлението, че числото което връща SUM() е TIME във контекста на число.

Отговор
в отговор на gonzales #4

Re: TIME_FORMAT в MySQL

А откъде си останал с такова впечатление????

Няма къде да го прочетеш а ако го пробваш ще видиш, че изобщо не прилича на часове минути и секунди.

Та въпросът ми е защо почваш питането си със "очаквания" резултат?

Откъде тези очаквания?

Наистина не разбирам.

salle.online.bg/sig
Отговор
в отговор на salle #5

Re: TIME_FORMAT в MySQL

ми стори ми се логично сумата от времена пак да е време и не си направих труда да проверя дали е така :-) а като получа четирицифрено число, реших че е време без разделителите, както MySQL представя дати и времена, когато прави с тях аритметични операции.

Отговор
в отговор на gonzales #6

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
Отговор
в отговор на salle #7

Re: TIME_FORMAT в MySQL

ммм да, част от това вече бях схванал, т.е. че 15:40:00=15:20:00+2000
както и да е, сега вече съм наясно и с времената => съм по-умничъъъъкккк :-)

Отговор