我正在尝试选择特定时间段内的行:
$sql = mysql_query(" SELECT * FROM table WHERE ... AND
date BETWEEN ('$date' - Interval 2 YEAR) AND ('$date' + Interval 2 YEAR)
OR date ISNULL");
此列保存的日期格式为mm/dd/yyyy
一个。如何选择时间间隔?目前它正在选择所有行,而不仅仅是该日期范围内的行。
我是否使用了正确的语法来确保我们也包括所有空选项?
更新。
根据答案和评论,我将列类型更改为“日期”(它是 varchar),并且还将现有条目的当前类型更改为正确的日期格式。
我现在有两个问题: A。这仍然不起作用...还有什么问题? b.我想在保存条目的 PHP 中进行更改。我该怎么办?以下是否正确:
$new_date = mysql_query("STR_TO_DATE($old_date_string,'%m/%d/%Y')");
解决方案。
首先,我将列类型更改为 DATE(从 VARCHAR)。
其次,我将所有现有条目从其现有列和类型 (str) 移动并转换为新类型 (date) 和新列。
第三,我在“日期”部分添加了括号。
第四,我将 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;
进行这些更改后,处理日期对您来说会容易得多。插入您收到的日期时,您只需使用 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')");
这假设 $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)");
$date
必须是 Y-m-d 格式。
关于Mysql日期间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707683/