2014-02-19 2 views
0

Когда я использую код ниже, он получит результаты, начиная с сегодняшней и прошлой недели из базы данных.Perl и MYSQL. Могу ли я заменить now() на переменные?

коды:

my $sqlMySQL = " 
    SELECT LOT,DPPROGRAM,PROCESS,FILEMODDATE,COUNT(*) 
    FROM dc_fst_metadata 
    WHERE COMMENT='$comment' 
    AND ***FILEMODDATE between date_sub(now(),INTERVAL 1 WEEK) and now()*** 
    GROUP BY LOT,DPPROGRAM,PROCESS"; 

Вопрос теперь я пытаюсь заменить сейчас() (это потому, что я хотел бы выбрать другой день и отслеживать обратно в 7 дней результаты вместо начала с сегодняшнего дня) с переменной и ничего не получает от db. Любое предложение или решение поместить в переменную?

коды после положить в переменной:

$datetime="2014-01-26 00:00:00" 
my $sqlMySQL = " 
    SELECT LOT,DPPROGRAM,PROCESS,FILEMODDATE,COUNT(*) 
    FROM dc_fst_metadata 
    WHERE COMMENT='$comment' 
    AND ***FILEMODDATE between date_sub('$datetime',INTERVAL 1 WEEK) and '$datetime'*** 
    GROUP BY LOT,DPPROGRAM,PROCESS"; 

Большое спасибо. P.s. Я новичок в perl и MYSQL.

+0

Какая ошибка вы получаете? – dethtron5000

+0

@ deathron5000 ничего не получает от db, но я уверен, что есть данные внутри db. Извините, что запутал вас, коды не получили ошибок. Теперь я изменяю поток. –

+0

попытайтесь распечатать запрос SQL и запустить его через клиент mysql. Сообщите нам, если возникнут ошибки – user4035

ответ

1

Вам необходимо преобразовать Datetitme-String в «дату базы данных». Вместо

date_sub('$datetime',INTERVAL 1 WEEK) 

использования: (!)

date_sub(str_to_date('$datetime','%y-%m-%d %T'),INTERVAL 1 WEEK) 

Пожалуйста, не используйте литералы в SQLs. Попробуйте использовать привязку

Смежные вопросы