MYSQL在年度日期之间选择

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)

如果一年变化会导致它破裂的原因是什么?即使年份发生变化,我怎样才能让它发挥作用.

ech*_*_Me 5

你可以这样做

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)

在这里演示

编辑:

如果你想在这里修理你的桌子怎么做

  1. 添加适当DATE数据类型的新列:

    ALTER TABLE `Forms` ADD `new_date` DATE AFTER `Date`;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用MySQL的STR_TO_DATE()函数使用旧列中保留的日期填充该新列:

    UPDATE `Forms` SET `new_date` = STR_TO_DATE(`Date`, '%d-%m-%Y');
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除旧列(如果需要,将其重命名为新列):

    ALTER TABLE `Forms` DROP `Date`, CHANGE `new_date` `Date` DATE;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 更改您的应用程序以使用此新列.