当我在 MySQL 中编写查询时,例如
SELECT * FROM `customer` where date BETWEEN '01/20/2012' AND '01/31/2012'
它还显示了 2013 年客户的详细信息。
任何人都可以帮助我吗..
当我在 MySQL 中编写查询时,例如
SELECT * FROM `customer` where date BETWEEN '01/20/2012' AND '01/31/2012'
它还显示了 2013 年客户的详细信息。
任何人都可以帮助我吗..
您必须将其转换VARCHAR
为 aDATE
进行比较;
SELECT *
FROM `customer`
WHERE STR_TO_DATE(`date`, '%m/%d/%Y')
BETWEEN '2012-01-20' AND '2012-01-31'
请注意,这将丢失您在列上的所有索引,因为在比较之前需要转换每一行,这对性能不利。
在 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 命令。
请注意,依赖日期格式的 PHP 代码可能需要一些更新才能使用DATE
.
SELECT
*
FROM
customer
WHERE
STR_TO_DATE(dateField, '%m/%d/%Y') BETWEEN '01/20/2012' AND '01/31/2012';
试试这个方法。
SELECT
*
FROM
customer
WHERE
STR_TO_DATE(dateField, '%m/%d/%Y') BETWEEN STR_TO_DATE('01/20/2012', '%m/%d/%Y') AND STR_TO_DATE('01/31/2012', '%m/%d/%Y');
将您的数据类型更改date
为DATETIME
或简单地更改为,DATE
如下所示:
UPDATE `customer`
SET `date` = STR_TO_DATE( `date`, '%m/%d/%Y' );
更新后,ALTER
这样使用:
ALTER TABLE `customer`
CHANGE COLUMN `date` `date` DATE NOT NULL;
之后,使用这种选择查询:
SELECT *
FROM `customer`
WHERE `date` BETWEEN '2012-01-20' AND '2012-01-31';
更改数据类型的原因在此处进行了解释:何时使用VARCHAR
和DATE
/DATETIME
在此处阅读其他与日期和时间相关的数据类型:The DATE
、DATETIME
和TIMESTAMP
Types。
假设date
字段类型是DATE
;
SELECT * FROM `customer` WHERE `date` BETWEEN '2012-01-20' AND '2012-01-31'
从手册;
DATE 类型用于具有日期部分但没有时间部分的值。MySQL 以 'YYYY-MM-DD' 格式检索和显示 DATE 值。
参考:http ://dev.mysql.com/doc/refman/5.5/en/datetime.html
更新
但是,将日期存储为 是个坏主意varchar
,也许查询可能像:
SELECT * FROM `customer` WHERE `date` REGEXP '^2012-01-(2[0-9]|[0-3][0-9])$'
参考:http ://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
但如果可能的话,您需要将字段类型从 更改VARCHAR
为DATE
。
SELECT * FROM `customer` where date BETWEEN '2012/01/20' AND '2012/31/01'
It will run now because phpmyadmin has been upgraded