Luc*_*ord 2 mysql database null datetime date
我正在尝试选择在特定时间段内的行:
$sql = mysql_query(" SELECT * FROM table WHERE ... AND
date BETWEEN ('$date' - Interval 2 YEAR) AND ('$date' + Interval 2 YEAR)
OR date ISNULL");
Run Code Online (Sandbox Code Playgroud)
此列中保存的日期格式为mm/dd/yyyy
一个.如何选择时间间隔?目前它正在选择所有行,而不仅仅是这个日期范围内的那些行.
湾 我是否使用corret语法来确保包含所有null选项?
更新.
在答案和注释之后,我将列类型更改为"Date"(它是varchar),并且还将现有条目的当前类型更改为正确的日期格式.
我现在有两个问题:a.这仍然不起作用......还有什么可能是问题?湾 我想在PHP中更改保存条目的位置.我该怎么办呢?以下是正确的:
$new_date = mysql_query("STR_TO_DATE($old_date_string,'%m/%d/%Y')");
Run Code Online (Sandbox Code Playgroud)
解.
首先,我将列类型更改为DATE(来自VARCHAR).
其次,我移动并将所有现有条目从其现有列和类型(str)转换为新类型(日期)和新列.
第三,我在"日期"部分添加了括号.
第四,我换ISNULL到IS NULL-插件的空间,从而改变它的功能给一个说法.
第五,我现在正在更新我的脚本,以便将来日期保存到新类型的新列中,在将它们保存到数据库之前将它们转换为正确的fprmat.
谢谢@nnicholas和大家.
如果您确实将日期存储为字符串,我建议您使用以下内容更新表格 -
-- add a new column of type DATE
ALTER TABLE `table` ADD COLUMN `date_new` DATE AFTER `date`;
-- populate the new column from the old one
UPDATE `table` SET `date_new` = STR_TO_DATE(`date`,'%m/%d/%Y');
-- drop the old column
ALTER TABLE `table` DROP COLUMN `date`;
-- rename the new column
ALTER TABLE `table` CHANGE `date_new` `date` DATE;
Run Code Online (Sandbox Code Playgroud)
完成这些更改后,处理日期对您来说将更加容易.插入您收到的日期时,您只需使用STR_TO_DATE('new_value','%m/%d/%Y')在插入期间转换日期 -
mysql_query("INSERT INTO `table` (field1, field2, `date`)
VALUES('value1', 'value2', STR_TO_DATE('$old_date_string','%m/%d/%Y')");
Run Code Online (Sandbox Code Playgroud)
这假设$ old_date_string已经被清理.
随着表结构的更新,标准日期算术函数将按预期工作.
$sql = mysql_query("SELECT *
FROM table
WHERE ...
AND (`date` BETWEEN ('$date' - INTERVAL 2 YEAR) AND ('$date' + INTERVAL 2 YEAR) OR `date` IS NULL)");
Run Code Online (Sandbox Code Playgroud)
$date 必须采用Ymd格式.
| 归档时间: |
|
| 查看次数: |
9622 次 |
| 最近记录: |