Mysql日期间隔

标签 mysql database datetime date null

我正在尝试选择特定时间段内的行:

$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/

相关文章:

MYSQL 替换数值

c# - 如何在 Ubuntu [C#] 中安装的 mysql 中存储图像?

javascript - DefineCall 不是函数,sequelize 错误

python - 在 Pymongo 查询路径中使用日期时间的最佳实践?

php - 学说查询生成器 : how to do a query with inner joins conditions

mysql - 通过不断的编辑维护订单数据的完整性

php - 试图在php中输出一个mysql数据库

javascript - 长日期格式转短日期格式yyyy-mm-dd

linux - 将时间与日期和字符串分开

mysql - 如何在mysql中将一个表中的3列复制到另一个表中