我在MySQL数据库中有一个表,其中一个名为'Date'的字段,问题是日期格式为DD-MM-YYYY所以我无法将其作为DATE类型字段上传到MySQL。而是字段类型是字符串。考虑到这一点,我如何编写将产生这种效果的查询 -
SELECT * FROM `table`
WHERE (date_field BETWEEN '2010-01-30' AND '2010-09-29')
请记住'date_field'不是DATE类型,而是字符串。
答案 0 :(得分:15)
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
答案 1 :(得分:8)
修复表格!
添加相应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;
更改您的应用程序以使用此新列。
答案 2 :(得分:0)
以各种格式与Dates合作过后,我发现最好将格式化回数据库格式,或者使用您自己的一致格式进行处理。我们使用的一个选项是我们自己的日期时间格式,它只是YYYYMMDDhhmmss,它总是可以正确排序闰年等...并且使解析数据变得容易。然后我们可以在用户所需的视图中显示格式,没有任何问题。
虽然这不是您问题的直接答案,但我发现在处理来自不同国家/地区的日期和时间格式时,这会节省大量时间和麻烦。我们也倾向于节省祖鲁时间。