![]() |
![]() |
Ксенофонт 30.09.2004 - 13:47 |
Понятно, что нужно книжки почитать, но некогда. Дано - из базы Mysql берется дата из поля формата Date в виде 'yyyy-mm-dd'. Надо: сравнить эту дату с текущей, только и всего. Спасибо |
Уверенный 1 - 30.09.2004 - 15:24 | Так и сравнивай в mysql: там есть функция now() |
Ксенофонт 2 - 30.09.2004 - 15:35 |
Как раз сравнивать надо в cgi-скрипте. В Перле есть localtime, но там аж 9 переменных... Как из них выделить дату и сравнить с Mysql-ской датой, непонятно мне... Всё привести к тексту не получится, т.к. дата, полученная в Перле должна использоваться в запросе ... WHERE date = ... |
uusge 3 - 30.09.2004 - 15:39 |
sub getdate { $time = time() + ($time_zone * 3600); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time); $year =~ s/^\d(\d\d)$/$1/; if ($sec < 10) {$sec = "0$sec"; } if ($min < 10) {$min = "0$min"; } if ($hour < 10){$hour = "0$hour"; } $mon++; if ($mon < 10) {$mon = "0$mon"; } if ($mday < 10) {$mday = "0$mday"; } } используй всегда эту функцию, дата и время точное |
Alexander Smith 4 - 30.09.2004 - 22:22 |
я может чего-то в принципе не понимаю, НО в перле есть некая такая штука, называется она "time" и выдает она время в секундах от 01.01.1970 00:00 - и скажите мне пожалуйста, неужели не разумнее хранить время именно в таком формате. для простоты обращения в виде строки - не более 10 символов будет еще оччень долго :), а можно в виде 4-х байтового числа (кажется есть такой типе в мускуле) - хватит еще чуть-чуть больше чем на 30 лет... - это если оптимизировать размер базы. |
Alexander Smith 5 - 30.09.2004 - 22:24 | собственно вопрос - я прав или нет ? |
Wsc 6 - 30.09.2004 - 22:50 |
to 5: Прав :-) Просто не все хранят в таком виде. to 0: Для преобразования даты в формат time в mysql есть ф-я UNIX_TIMESTAMP() |
Ксенофонт 7 - 01.10.2004 - 10:31 |
Я работаю с уже сделанной таблицей в Mysql. Там есть поле в формате именно DATE, а не Timestamp. А в Перле, как я понял, нет отдельных функций работы с датами. :-( Ковыряться нет времени, столько дел сразу... В общем вопрос конкретизирую. $qry="Select SUM(myField) from myTable WHERE date>=...а вот сюда надо всунуть первое число текущего месяца..."; Функция (3) отображает дату, запрос проходит без ошибки, но вываливает всю сумму, а не только с начала месяца. :-( |
Kokoc 8 - 01.10.2004 - 21:56 |
для сравнения > или < не используй даты в чистом виде, а используй TO_DAYS(date) В твоем варианте можно так: SELECT ...WHERE TO_DAYS(date)>=TO_DAYS(CONCAT(SUBSTRING(CURDATE(),1,7),'-01')) или SELECT ...WHERE TO_DAYS(date)>=TO_DAYS(SUBDATE(CURDATE(), INTERVAL DAYOFMONTH(NOW())-1 DAY)) или в перле использовать конструкцию типа: $str=sprintf("%4d-%02d-01",localtime()->year+1900, localtime()->mon+1, localtime()->mday); $qry="Select SUM(myField) from myTable WHERE TO_DAYS(date) >= TO_DAYS('$str')"; |
Wsc 9 - 01.10.2004 - 23:32 |
to 8: лучше вот так :-) $str=sprintf("%4d-%02d-01",localtime()->year+1900, localtime()->mon+1); |