以下查询完美运行:
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
答案 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')
);
"