【问题标题】:How to select by using custom date如何使用自定义日期进行选择
【发布时间】:2013-07-30 05:57:55
【问题描述】:

我有一个自定义日期(动态构建/输入),例如“2013-5-13”
但我的 mysql 数据库存储为 '2013-05-13'
所以我试着把它找回来

SELECT * FROM TBL WHERE XDATE='2013-5-13' >>> it return me ZERO result

但是

SELECT * FROM TBL WHERE XDATE='2013-05-13' >>> it return me CORRECT result

那么如何直接在mysql语句中解决这个呢?

【问题讨论】:

  • 不能在查询中使用之前清除日期?
  • 在两列中使用DATE_FORMAT
  • XDATE 是日期/日期时间字段吗?还是 varchar?

标签: php mysql sql select


【解决方案1】:

使用strtotime函数转换两个日期,然后检查。

【讨论】:

    【解决方案2】:

    在查询数据库之前只需使用strtotime()正确设置...

     $date = "2013-5-16";
     $date = date("Y-m-d",strtotime($date));
    
     $sql = "SELECT * FROM TBL WHERE XDATE='".$date."'";
    

    【讨论】:

      【解决方案3】:

      仅当您的输入始终采用“年-月-日”格式时,此答案才有效

      $date = '2013-5-13';
      $parts = explode('-', $date);
      $year = $parts[0];
      $month = $parts[1];
      $day = $parts[2];
      //i assume that $year is always valid. Possible checks are left to the reader
      //(lol i've always dreamed to write that sentence somewhere)
      $month = str_pad($month, 2, "0", STR_PAD_RIGHT);
      $day = str_pad($day, 2, "0", STR_PAD_RIGHT);
      
      $clean_date = "$year-$month-$date"; //note the quotes
      

      现在您可以在查询中使用$clean_date

      【讨论】:

        【解决方案4】:

        您可以格式化日期:

        SELECT DATE_FORMAT('2013-5-13', '%Y-%m-%d');
        

        在 WHERE 部分:

        SELECT * FROM TBL WHERE XDATE=DATE_FORMAT('2013-5-13', '%Y-%m-%d')
        

        MySQL docs

        【讨论】:

        • 使用 %c 而不是 %m 可能会更好,但这是正确的方法,也是唯一使用 xdate 上的索引(如果存在)的答案
        【解决方案5】:

        使用DATE_FORMAT

        DATE_FORMAT(`XDATE`,'%Y-%c-%d')
        

        查询

        SELECT * FROM TBL WHERE DATE_FORMAT(`XDATE`, '%Y-%c-%d') = '2013-5-13'
        

        MySql DATE_FORMAT Documentation

        %c  Month, numeric (0..12)
        

        【讨论】:

        • @echo_Me 你说得对。我同样用 sql col 类型。我必须同样使用字符串。是的,应该是%c
        【解决方案6】:

        DATE_FORMAT 中使用这个%c

             select *  from TBL WHERE DATE_FORMAT(`XDATE`,'%Y-%c-%d') = '2013-5-13'
        

        DEMO HERE

        【讨论】:

          【解决方案7】:

          我认为最简洁的方法是使用 MySQL DATE() 函数:

          SELECT * FROM TABLE WHERE DATE(date_col) = DATE("2013-5-01")
          

          MySQL docs

          【讨论】:

            【解决方案8】:

            使用这个查询:-

            SELECT * FROM TBL WHERE UNIX_TIMESTAMP(XDATE)=strtotime('2013-5-13')
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多