gpt4 book ai didi

日期之间的mysql查询选择显示错误答案

转载 作者:行者123 更新时间:2023-12-01 00:01:28 25 4
gpt4 key购买 nike

当我在 MySQL 中编写查询时,例如

SELECT * FROM `customer` where date BETWEEN '01/20/2012' AND '01/31/2012'

它还显示了 2013 年客户的详细信息。

谁能帮帮我..

最佳答案

您必须将 VARCHAR 转换为 DATE 才能进行比较;

SELECT *
FROM `customer`
WHERE STR_TO_DATE(`date`, '%m/%d/%Y')
BETWEEN '2012-01-20' AND '2012-01-31'

An SQLfiddle .

请注意,这会遗漏您列上的任何索引,因为每一行都需要在比较之前进行转换,这对性能不利。

在 VARCHAR 中存储日期通常被视为一个坏主意,排序顺序很重要,如果系统在国际上使用,月/日很容易混淆。我建议您将日期列转换为 DATE 数据类型。

编辑:这是一种在不丢失现有数据的情况下转换列的方法;

# Add a new DATE column
ALTER TABLE `customer` ADD COLUMN tmpdate DATE;
# Transfer the data from the VARCHAR column to the DATE column
UPDATE `customer` SET tmpdate=STR_TO_DATE(`date`, '%m/%d/%Y');
# Drop the old VARCHAR column
ALTER TABLE `customer` DROP COLUMN `date`;
# Rename the new DATE column to `date`.
ALTER TABLE `customer` CHANGE `tmpdate` `date` DATE;

当然,您应该永远不要在未先进行适当备份的情况下尝试执行 alter table 命令。

An SQLfiddle demonstration of the conversion .

请注意,依赖于日期格式的 PHP 代码可能需要进行一些更新才能使用 DATE

关于日期之间的mysql查询选择显示错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14660426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com