我在 MySQL 数据库中有一个表,其中包含一个名为“Date”的字段,问题是日期的格式为 DD-MM-YYYY,因此我无法将其作为 DATE 类型字段上传到 MySQL。相反,字段类型是字符串。考虑到这一点,我该如何编写能够产生这种效果的查询 -
SELECT * FROM `table`
WHERE (date_field BETWEEN '2010-01-30' AND '2010-09-29')
请记住 'date_field' 不是 DATE 类型,而是字符串。
我在 MySQL 数据库中有一个表,其中包含一个名为“Date”的字段,问题是日期的格式为 DD-MM-YYYY,因此我无法将其作为 DATE 类型字段上传到 MySQL。相反,字段类型是字符串。考虑到这一点,我该如何编写能够产生这种效果的查询 -
SELECT * FROM `table`
WHERE (date_field BETWEEN '2010-01-30' AND '2010-09-29')
请记住 'date_field' 不是 DATE 类型,而是字符串。
SELECT * FROM `table`
WHERE str_to_date(date_field, '%d-%m-%Y') BETWEEN '2010-01-30' AND '2010-09-29'
你也可以这样做:
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
修桌子!
DATE
添加适当数据类型的新列:
ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;
使用 MySQL 的STR_TO_DATE()
函数用旧列中保存的日期填充该新列:
UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, '%d-%m-%Y');
删除旧列(如果需要,在其位置重命名新列):
ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;
更改您的应用程序以使用此新列。
在使用过各种格式的日期后,我发现最好将格式转换回数据库格式,或者您自己的一致格式进行处理。我们使用的一个选项是我们自己的日期时间格式,它只是 YYYYMMDDhhmmss,对于闰年等,它总是会正确排序......并且使解析数据变得容易。然后我们可以在用户想要的视图中显示格式,没有任何问题。
虽然这不是您问题的直接答案,但我发现在处理来自不同国家/地区的日期和时间格式时,这可以节省大量时间和麻烦。我们也倾向于节省祖鲁时间。