3

我在 MySQL 数据库中有一个表,其中包含一个名为“Date”的字段,问题是日期的格式为 DD-MM-YYYY,因此我无法将其作为 DATE 类型字段上传到 MySQL。相反,字段类型是字符串。考虑到这一点,我该如何编写能够产生这种效果的查询 -

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

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

4

3 回答 3

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

SQLFiddle 示例

编辑

你也可以这样做:

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
于 2012-06-07T07:16:36.910 回答
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. 更改您的应用程序以使用此新列。

于 2012-06-07T07:26:30.407 回答
0

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

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

于 2012-06-07T13:59:28.390 回答