我正在编写一个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';"
答案 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'