这个查询出了什么问题?(sql convert date)

时间:2013-05-13 09:59:23

标签: mysql sql

以下查询完美运行:

SELECT * 
FROM MsUser 
WHERE absensi_tanggal = DATE_FORMAT( STR_TO_DATE( "' .$query_array['datepicker'] . '", \'%m/%d/%Y\' ) , \'%Y-%m-%d\' )

但是,此查询无效。我应该错过那里的东西:

SELECT * 
FROM MsUser 
WHERE absensi_tanggal BETWEEN DATE_FORMAT( STR_TO_DATE( "' .$query_array['datepicker1'] . '", \'%m/%d/%Y\' ) , \'%Y-%m-%d\' ) 
AND DATE_FORMAT( STR_TO_DATE( "' .$query_array['datepicker2'] . '", \'%m/%d/%Y\' ) , \'%Y-%m-%d\' )

上面的查询总是返回0结果。

感谢任何帮助,谢谢:D

1 个答案:

答案 0 :(得分:1)

由于STR_TO_DATE会返回可与BETWEEN一起使用的正确DATE类型值,您是否尝试过:

SELECT * 
FROM MsUser 
WHERE absensi_tanggal 
BETWEEN 
STR_TO_DATE( "' .$query_array['datepicker1'] . '", \'%m/%d/%Y\' )
AND 
STR_TO_DATE( "' .$query_array['datepicker2'] . '", \'%m/%d/%Y\' )

我的猜测是MySQL在将前面的字符串转换为日期然后返回字符串然后再返回日期以使BETWEEN工作时会窒息。

另外,试试这个让它更整洁:

"
SELECT * 
FROM MsUser 
WHERE absensi_tanggal 
BETWEEN 
STR_TO_DATE('{$query_array['datepicker1']}','%m/%d/%Y')
AND 
STR_TO_DATE('{$query_array['datepicker2']}','%m/%d/%Y');
"

如果你没有确认datepicker1的值早于datepicker2,你可以运行这样的查询以确保(尽管我建议仅用于测试):< / p>

SELECT * 
FROM MsUser 
WHERE 
(
absensi_tanggal 
BETWEEN 
STR_TO_DATE('{$query_array['datepicker1']}','%m/%d/%Y')
AND 
STR_TO_DATE('{$query_array['datepicker2']}','%m/%d/%Y')
) OR (
absensi_tanggal 
BETWEEN 
STR_TO_DATE('{$query_array['datepicker2']}','%m/%d/%Y')
AND 
STR_TO_DATE('{$query_array['datepicker1']}','%m/%d/%Y')
);
"