Abi*_*ran 3 php mysql select date
我创建了一个用户提交的简单表单.一切都很好但我最近发现了
SELECT * FROM `Forms` WHERE `Date` BETWEEN '{$startDate}' AND '{$endDate}'
Run Code Online (Sandbox Code Playgroud)
该列Date是类型TEXT.我需要它是文本因为我认为以MM/DD/YY格式显示所有内容会更容易 .现在我不想冒更改数据类型的风险,因为表单工作正常.
Date列的示例
01-03-2013
01-04-2013
07-25-2012
08-01-2012
08-01-2012
08-01-2012
08-01-2012
Run Code Online (Sandbox Code Playgroud)
工作查询
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '12-12-2012'
Run Code Online (Sandbox Code Playgroud)
不工作的查询
SELECT * FROM `Forms` Where `Date` Between '01-08-2012' and '01-04-2013'
Run Code Online (Sandbox Code Playgroud)
如果一年变化会导致它破裂的原因是什么?即使年份发生变化,我怎样才能让它发挥作用.
你可以这样做
SELECT * FROM `Forms`
WHERE str_to_date(`Date`, '%d-%m-%Y') BETWEEN '2012-01-30' AND '2013-09-29'
Run Code Online (Sandbox Code Playgroud)
编辑:
如果你想在这里修理你的桌子怎么做
添加适当DATE数据类型的新列:
ALTER TABLE `Forms` ADD `new_date` DATE AFTER `Date`;
Run Code Online (Sandbox Code Playgroud)使用MySQL的STR_TO_DATE()函数使用旧列中保留的日期填充该新列:
UPDATE `Forms` SET `new_date` = STR_TO_DATE(`Date`, '%d-%m-%Y');
Run Code Online (Sandbox Code Playgroud)删除旧列(如果需要,将其重命名为新列):
ALTER TABLE `Forms` DROP `Date`, CHANGE `new_date` `Date` DATE;
Run Code Online (Sandbox Code Playgroud)更改您的应用程序以使用此新列.