【问题标题】:searching data between dates stored in varchar in mysql在mysql中存储在varchar中的日期之间搜索数据
【发布时间】:2012-09-28 08:53:10
【问题描述】:

我将日期存储在varchar 的列 server_date_time 中,格式为dd/mm/yyyy,我想获取位于某些日期之间的记录,所以我使用了查询

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

【问题讨论】:

  • 见下面我的回答。我的解决方案有效吗?

标签: mysql date compare between


【解决方案1】:

试试这个。您可以按照您的问题以 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

干杯!!!

【讨论】:

  • 这个解决方案应该有效;但我强烈建议您将数据类型从 VARCHAR 更改为 DATETIME...
  • 这就像一个魅力。我正在研究另一个人的数据库,当我看到 varchar 时,感觉就像……天哪。但 StackOverflow 一如既往地提供帮助。
【解决方案2】:

试试这个 -

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】:

    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数据类型。这将避免您进行影响查询性能的强制转换。

    【讨论】:

      【解决方案4】:

      如果您将日期始终存储在列中的dd/mm/yyyy 中,那么这很容易:

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

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

      【讨论】:

        【解决方案5】:
        SELECT * 
        FROM  `activity_emp` 
        WHERE STR_TO_DATE(  `column_name` ,  '%d/%m/%Y' ) 
        BETWEEN  '2010-10-10'
        AND  '2010-11-10'
        

        【讨论】:

          【解决方案6】:

          这是在两个日期之间进行搜索的简单易懂的日期查询

          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-16
            • 2012-10-27
            • 2021-10-03
            • 2015-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多