5

varchardd/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 月份的查询

4

6 回答 6

8

试试这个。您可以在问题中以 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')

更新:我强烈建议您将数据类型从更改VARCHARDATETIME

干杯!!!

于 2012-10-08T06:27:22.817 回答
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请使用DATEDATETIME数据类型。这将避免您进行影响查询性能的强制转换。

于 2012-10-08T06:06:00.830 回答
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 可以使用索引。

于 2012-10-08T06:12:10.997 回答
0

如果您始终将日期存储在dd/mm/yyyy列中,那么这是一项简单的任务:

SELECT * from activity_emp 
where server_date_time BETWEEN '29/09/2012' AND '07/10/2012'

这还不够吗?希望对你有帮助

于 2012-10-08T06:12:42.353 回答
0
SELECT * 
FROM  `activity_emp` 
WHERE STR_TO_DATE(  `column_name` ,  '%d/%m/%Y' ) 
BETWEEN  '2010-10-10'
AND  '2010-11-10'
于 2013-06-30T15:23:41.193 回答
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
于 2016-03-07T08:45:40.277 回答