Php MYSQL选择年份上的日期间隔
我创建了一个用户提交的简单表单。一切都很好,但我最近发现Php MYSQL选择年份上的日期间隔,php,mysql,date,select,Php,Mysql,Date,Select,我创建了一个用户提交的简单表单。一切都很好,但我最近发现 SELECT * FROM `Forms` WHERE `Date` BETWEEN '{$startDate}' AND '{$endDate}' 列Date的类型为TEXT。我需要它是文本,因为我认为以MM/DD/YY格式显示所有内容会更容易。现在我不想冒险更改数据类型,因为表单工作正常 日期列的示例 01-03-2013 01-04-2013 07-25-2012 08-01-2012 08-01-2012 08-01-2012
SELECT * FROM `Forms` WHERE `Date` BETWEEN '{$startDate}' AND '{$endDate}'
列Date
的类型为TEXT
。我需要它是文本,因为我认为以MM/DD/YY
格式显示所有内容会更容易。现在我不想冒险更改数据类型,因为表单工作正常
日期列的示例
01-03-2013
01-04-2013
07-25-2012
08-01-2012
08-01-2012
08-01-2012
08-01-2012
工作查询的Ex
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '12-12-2012'
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '01-04-2013'
不工作查询的Ex
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '12-12-2012'
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '01-04-2013'
如果年份发生变化,它为什么会破裂?即使年份发生变化,我怎样才能让它工作呢 试试这个:
SELECT * FROM `Forms` Where str_to_date(`Date`, '%d/%m/%Y') Between '01-08-2012' and '12-12-2012'
因为您的列是
TEXT
列,所以MySQL将使用字母比较
01-08
位于01-04
之前,因此实际上是月份部分已经中断
若要解决此问题,请将列转换为日期类型,或将日期顺序反转为日期类型,在这两种情况下,
之间的
应能正常工作。如果担心该列损坏,请导出数据库,然后进行更改。你不会得到你想要的,因为它是一个文本字段而不是日期字段。MySQL是按字符排序的。就像在看第一个角色,然后是下一个,然后是下一个
就像NAV说的那样,它不会坏,但要做一个备份,只是把它包起来
至于仅显示日期,您可以在空格上分解()以仅获取日期:
<?php
list($date, $time) = explode(" ", $datetime, 2);
echo $date;
?>
试试这个:
select * from "forms" where Date('column_name') between '' and ''
你可以这样做
SELECT * FROM `Forms`
WHERE str_to_date(`Date`, '%d-%m-%Y') BETWEEN '2012-01-30' AND '2013-09-29'
编辑:
如果你想在这里收拾你的桌子,你怎么办
ALTER TABLE `Forms` ADD `new_date` DATE AFTER `Date`;
UPDATE `Forms` SET `new_date` = STR_TO_DATE(`Date`, '%d-%m-%Y');
因为它是文本01-04。。。。在01-08之前。。。。。将其转换为日期如果数据集很大,则动态转换日期可能不是一个好主意。但如果您的数据集很小,这会很快。听起来很有趣。我们可以在查询中这样做吗?例如,从2012-12-12和2013-01-04之间反向(日期)的表单中选择*?编辑以显示其工作方式以及您是否希望更改表结构。谢谢<代码>从表格中选择*,其中str_to_date(
date
,“%d-%m-%Y”)介于“2012-01-30”和“2013-09-29”之间,效果非常好。我会将数据类型更改说明保存在book mark中。我敢肯定每个人都猜到我不懂SQL。。不遵循SQL表中的标准格式是相当愚蠢的。非常感谢你们,你们帮我省了几个小时的人头痛