我有一个查询,我必须检查日期过滤搜索和我的查询,如下所示created
是字段,其包含日期时间,并且根据日期选择器我已经获得“dmY”甲酸盐
请帮我解决这个错误
SELECT o.*,u.first_name,u.last_name,u.email
FROM tbl_orders AS o
LEFT JOIN tbl_users AS u ON o.customer_id = u.id
WHERE 1=1 AND date_format(o.created,'%d-%m-%Y') >= "01-04-2017"
AND date_format(o.created,'%d-%m-%Y') <= "01-05-2017"
ORDER BY id ASC LIMIT 0 , 25
我找到零结果 请帮帮我
由于
答案 0 :(得分:1)
您使用的日期文字不正确。您应该将created
日期时间列与'2017-05-01'
进行比较。试试这个完整的查询:
SELECT o.*, u.first_name, u.last_name, u.email
FROM tbl_orders AS o
LEFT JOIN tbl_users AS u
ON o.customer_id = u.id
WHERE o.created BETWEEN '2017-04-01' AND '2017-05-01'
ORDER BY id ASC LIMIT 0, 25
您不需要在DATE_FORMAT()
列上使用created
,假设您正确地告诉我们它是日期时间,因为它已经一个日期类型。此外,在SQL中编写字符串文字时,通常应使用单引号而不是双引号。
有关日期文字的可接受格式的详细信息,请参阅MySQL documentation。
答案 1 :(得分:0)
您的date_format不正确
%d日期,数字(00-31)
%m月,数字(00-12)
%Y年,数字,四位数
所以你的日期格式功能应该是
date_format(o.created,'%d-%m-%Y')
答案 2 :(得分:0)
更改日期:
发件人:强>
AND date_format(o.created,'%y-%m-%d') >= "01-04-2017"
AND date_format(o.created,'%y-%m-%d') <= "01-05-2017"
要强>
AND date_format(o.created,'%y-%m-%d') >= "2017-01-04"
AND date_format(o.created,'%y-%m-%d') <= "2017-01-05"
答案 3 :(得分:0)
date_format()函数的返回类型是VARCHAR。所以它不能用于比较。使用STR_TO_DATE,如下所示
STR_TO_DATE(o.created, '%Y-%m-%d') <= STR_TO_DATE("01-05-2017", '%d-%m-%Y')