如何使用'date'字段查询两个日期之间的字符串?

时间:2012-06-07 07:12:36

标签: mysql phpmyadmin

我在MySQL数据库中有一个表,其中一个名为'Date'的字段,问题是日期格式为DD-MM-YYYY所以我无法将其作为DATE类型字段上传到MySQL。而是字段类型是字符串。考虑到这一点,我如何编写将产生这种效果的查询 -

SELECT * FROM `table` 
WHERE  (date_field BETWEEN '2010-01-30' AND '2010-09-29')

请记住'date_field'不是DATE类型,而是字符串。

3 个答案:

答案 0 :(得分:15)

SELECT * FROM `table` 
WHERE str_to_date(date_field, '%d-%m-%Y') BETWEEN '2010-01-30' AND '2010-09-29'

SQLFiddle example

修改

你也可以这样做:

SELECT * FROM `table` 
WHERE cast(substring(date_field, 7, 4) as unsigned) * 10000 + cast(substring(date_field, 4, 2) as unsigned) * 100 + cast(substring(date_field', 1, 2) as unsigned)
BETWEEN 20100130 AND 20100929

答案 1 :(得分:8)

修复表格!

  1. 添加相应DATE数据类型的新列:

    ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;
    
  2. 使用MySQL的STR_TO_DATE()函数填充旧列中包含日期的新列:

    UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, '%d-%m-%Y');
    
  3. 删除旧列(如果需要,将其重命名为新列):

    ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;
    
  4. 更改您的应用程序以使用此新列。

答案 2 :(得分:0)

以各种格式与Dates合作过后,我发现最好将格式化回数据库格式,或者使用您自己的一致格式进行处理。我们使用的一个选项是我们自己的日期时间格式,它只是YYYYMMDDhhmmss,它总是可以正确排序闰年等...并且使解析数据变得容易。然后我们可以在用户所需的视图中显示格式,没有任何问题。

虽然这不是您问题的直接答案,但我发现在处理来自不同国家/地区的日期和时间格式时,这会节省大量时间和麻烦。我们也倾向于节省祖鲁时间。