|
Тема
|
TIME_FORMAT в MySQL
|
|
Автор |
gonzales () |
Публикувано | 25.09.02 18:01 |
|
някой може ли да ми обясни защо следния израз вместо очаквания резултат връча НИЩО:
SELECT TIME_FORMAT(sum(duration),'%H:%i:%s') AS duration FROM logdata
където полето duration е от тип time
| |
Тема
|
Re: TIME_FORMAT в MySQL
[re: gonzales]
|
|
Автор |
salle (Един такъв) |
Публикувано | 25.09.02 18:30 |
|
А какъв е "очаквания резултат" ?
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 на 25.09.02 18:46.
| |
|
ааа, ясно. а аз бях останал с впечатлението, че числото което връща SUM() е TIME във контекста на число.
| |
Тема
|
Re: TIME_FORMAT в MySQL
[re: gonzales]
|
|
Автор |
salle (Един такъв) |
Публикувано | 26.09.02 17:18 |
|
А откъде си останал с такова впечатление????
Няма къде да го прочетеш а ако го пробваш ще видиш, че изобщо не прилича на часове минути и секунди.
Та въпросът ми е защо почваш питането си със "очаквания" резултат?
Откъде тези очаквания?
Наистина не разбирам.
| |
Тема
|
Re: TIME_FORMAT в MySQL
[re: salle]
|
|
Автор | gonzales (Нерегистриран) |
Публикувано | 26.09.02 19:29 |
|
ми стори ми се логично сумата от времена пак да е време и не си направих труда да проверя дали е така :-) а като получа четирицифрено число, реших че е време без разделителите, както MySQL представя дати и времена, когато прави с тях аритметични операции.
| |
Тема
|
Re: TIME_FORMAT в MySQL
[re: gonzales]
|
|
Автор |
salle (Един такъв) |
Публикувано | 26.09.02 19:58 |
|
И да и не ....
Когато 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
Наздраве :)
| |
|
ммм да, част от това вече бях схванал, т.е. че 15:40:00=15:20:00+2000
както и да е, сега вече съм наясно и с времената => съм по-умничъъъъкккк :-)
| |
|
|
|
|