帮助!我的数据库中有一列是日期。不幸的是,我所有的日期都是字符串形式 (YYYY.MM.DD)。我有一个 MASSIVE 数据库(300+GB),所以理想情况下希望避免转换。
有没有一种方法可以为 YYYY.MM.DD 和 YYYY.MM.DD 之间的日期选择行?脚本会是什么样子?
谢谢!
最佳答案
如果月份和日期以前导零存储,则 BETWEEN 运算符将按预期工作。 ORDER BY 也是如此。
create table your_table (
date_value varchar(10) not null
);
insert into your_table values
('2013.01.01'), ('2013.01.13'), ('2013.01.30'), ('2013.01.31'),
('2013.02.01'), ('2013.02.13'), ('2013.02.28'), ('2013.02.31'),
('2013.03.01'), ('2013.03.15'), ('2013.03.30'), ('2013.03.31');
select date_value
from your_table
where date_value between '2013.01.01' and '2013-01-31'
order by date_value;
2013.01.01
2013.01.13
2013.01.30
您的结构的主要问题之一是您失去了类型安全性。看看这个查询。
select date_value
from your_table
where date_value between '2013.02.01' and '2013.02.31'
order by date_value;
2013.02.01
2013.02.13
2013.02.28
2013.02.31
如果您使用日期或日期时间或时间戳类型的列,数据库管理系统将不允许插入值“2013.02.31”,因为它不是日期域中的值。它是 varchar 域中的一个值。 (“Arrrrgh!”也是如此,除非您在该列上有一个严格限制可接受值的 CHECK 约束。)
关于mysql - SQL Server : Want to use between clause with dates, 但日期为字符串形式 (YYYY.MM.DD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17643100/