在DateTime字段上查询,忽略小时和分钟

时间:2018-07-18 06:38:19

标签: php sql date datetime mysqli

我正在编写一个PHP站点,在其中我使用一些Mysql访问数据库。

我有一个名为travel的表,该表曾经有一个Date类型(根据phpMyAdmin)名为date的字段,并且我还有一个string类型的PHP变量$date它以"Y-m-d"

格式存储日期

当我需要从表中获取日期与$date中指定的日期相同的所有元素时,我能够通过这样的简单查询来做到这一点:

"SELECT * FROM travel WHERE date=$date"

现在的问题是,我需要将数据库上的日期字段数据类型从Date更改为DateTime,以同时存储小时和分钟。

对于此特定查询,我对小时和分钟不感兴趣。我只需要从表中获取日期与$date 中指定的日期相同的所有元素,而无需考虑存储在数据库字段中的小时和分钟

为实现这一目标,我应该改变什么?

例如:

$ date =“ 2030-12-25”

数据库

    ID (int)        date (DateTime)
    1           1994-05-30 12:25:00
    2           2030-12-25 15.20:00
    3           2030-12-25 10:30:00

我需要获取ID为2和3的元素。

PS:我知道也有类似的问题,但是由于不同的原因,它们都不对我有用

编辑:

使我无法正确执行此查询的错误也出现在旧版实现中,没有时间。

我在$ date变量上省略了单引号,这导致DBMS无法将日期标识为字符串。

旧查询:

"SELECT * FROM travel WHERE date=$date"

"SELECT * FROM travel WHERE date='$date'"固定在$date

上添加单引号

正如KIKO Software回答的那样,新版本也应包含引号:

"SELECT * FROM travel WHERE DATE(date) = '$date';"

3 个答案:

答案 0 :(得分:1)

只需更改:

"SELECT * FROM travel WHERE date=$date"

收件人:

"SELECT * FROM travel WHERE DATE(date) = '$date';"

函数DATE()date列中获取日期部分。

答案 1 :(得分:0)

您可以使用preg_match来获取日期的子字符串。

例如: preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)

答案 2 :(得分:0)

您需要使用Date函数格式化数据库中的datetime字段。

SELECT * FROM travel WHERE DATE(date)='2018-07-15'