К списку форумов К списку вопросов
Простой вопрос Perl
Ксенофонт
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);

К списку вопросов на форуме Веб-дизайн

>>