2

我有一个自定义日期(动态构建/输入),如“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语句中解决这个问题呢?

4

8 回答 8

6

%c用这个DATE_FORMAT

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

在这里演示

于 2013-07-30T07:54:19.947 回答
2

利用DATE_FORMAT

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

询问

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

MySql DATE_FORMAT 文档

%c  Month, numeric (0..12)
于 2013-07-30T07:52:59.667 回答
1

使用此查询:-

SELECT * FROM TBL WHERE UNIX_TIMESTAMP(XDATE)=strtotime('2013-5-13')
于 2013-07-30T07:57:00.600 回答
1

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

 $date = "2013-5-16";
 $date = date("Y-m-d",strtotime($date));

 $sql = "SELECT * FROM TBL WHERE XDATE='".$date."'";
于 2013-07-30T07:48:47.393 回答
0

您可以格式化日期:

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

在 WHERE 部分:

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

MySQL 文档

于 2013-07-30T07:52:49.010 回答
0

我认为最干净的方法是使用 MySQLDATE()函数:

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

MySQL 文档

于 2013-07-30T07:54:24.143 回答
0

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

于 2013-07-30T07:47:51.160 回答
0

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

$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在查询中使用。

于 2013-07-30T07:48:51.477 回答