我有一个网站,其中包含一个简单的PHP查询,可以毫无问题地从MYSQL表中返回记录。
$query = mysqli_query( $connection, "SELECT * FROM $shopname
我试图弄清楚如何仅根据名为" date"的字段返回最近5天的记录。日期字段是mysql中的VARCHAR类型。日期字段中日期的格式如下: 2016年8月9日下午5:52:17 。我确实从一些研究中尝试了以下查询,但这并没有返回任何内容。我做错了什么?
$query = mysqli_query( $connection, "SELECT * FROM $shopname WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 5 DAY)");
*重要 - 我无法将mysql字段更改为DATE。它必须是VARCHAR。
答案 0 :(得分:1)
您可以在此使用STR_TO_DATE()
作为VARCHAR日期格式:
示例:强>
$query = "SELECT * FROM $shopname
WHERE DATEDIFF(CURDATE(), STR_TO_DATE(date,'%Y-%m-%d')) < 5";
DateFormat的 STR_TO_DATE()
将用于将date
与CURDATE()
进行比较。
DATEDIFF()
将用于获取date
和current date
之间的日期差异。
但是,最好使用MYSQL Date format
,而不是VARCHAR
字段。
答案 1 :(得分:1)
假设您的vatchar日期列格式为dd-mm-yyyy,您可以通过这种方式转换日期
$query = mysqli_query( $connection,
" SELECT *
FROM $shopname
WHERE str_to_date(`date`, '%d-%m-%Y') >= DATE_SUB( CURDATE(), INTERVAL 5 DAY)");
答案 2 :(得分:0)
试试这个:
SELECT * FROM TABLE t WHERE t.date >= DATE(NOW()) - INTERVAL 5 DAY
如果char类型为date
date
否则您可以使用此方法检索过去5天的数据。
SELECT name,date
from TABLE
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) AND date <= CURDATE()
ORDER BY date DESC
答案 3 :(得分:0)
你可以通过mysql UNIX_TIMESTAMP使用这个方法。这可以改变时间戳的时间!
$query = mysqli_query( $connection, "SELECT * FROM $shopname WHERE `date` >= UNIX_TIMESTAMP(8/9/2016 5:52:17 PM)");