我将日期存储在varchar
dd/mm/yyyy
格式的server_date_time列中,并且我想获取位于某些日期之间的记录,因此我使用了查询
select * from activity_emp
where date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')>=
'29/09/2012'
and date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')<=
'07/10/2012';
我已将varchar
转换为查询中的字符串,但我的查询返回的查询数据仅与29/09/2012和30/09/2012相关。它还应返回10月份的查询
答案 0 :(得分:7)
试试这个。你可以像你的问题一样以dd / mm / yyyy格式输入日期......
SELECT * FROM activity_emp
WHERE STR_TO_DATE(server_date_time, '%d/%m/%Y')
BETWEEN STR_TO_DATE('29/08/2012', '%d/%m/%Y')
AND STR_TO_DATE('07/10/2012', '%d/%m/%Y')
更新:我强烈建议您将数据类型从VARCHAR
更改为DATETIME
干杯!!!
答案 1 :(得分:1)
STR_TO_DATE
就足够了。 DATE_FORMAT
将其更改回VARCHAR
SELECT...
FROM...
WHERE str_to_date(substr(server_date_time,1,10),'%d/%m/%Y')
BETWEEN '29/09/2012' AND '07/10/2012'
在处理date
时,请使用DATE
或DATETIME
数据类型。这将避免您进行影响查询性能的强制转换。
答案 2 :(得分:1)
试试这个 -
SELECT * FROM activity_emp
WHERE STR_TO_DATE(server_date_time, '%d/%m/%Y')
BETWEEN '2012-09-29' AND '2012-09-30'
但最好将server_date_time
存储在DATETIME数据类型中,以便MySQL可以使用索引。
答案 3 :(得分:0)
如果您将日期始终存储在列中的dd/mm/yyyy
,那么这是一项简单的任务:
SELECT * from activity_emp
where server_date_time BETWEEN '29/09/2012' AND '07/10/2012'
这不够吗?希望它能帮到你
答案 4 :(得分:0)
SELECT *
FROM `activity_emp`
WHERE STR_TO_DATE( `column_name` , '%d/%m/%Y' )
BETWEEN '2010-10-10'
AND '2010-11-10'
答案 5 :(得分:0)
这是简单易懂的日期查询,可以在两个日期之间进行搜索
Date that stored in datebase in like 01/01/2016 and datatype is varchar
SELECT * FROM `test` WHERE STR_TO_DATE(`test`.`date`, '%d/%m/%Y') BETWEEN '2016-01-01' AND '2016-01-31' ORDER BY `test`.`date` ASC