mysql - SQL Server : Want to use between clause with dates, 但日期为字符串形式 (YYYY.MM.DD)

标签 mysql sql sql-server database sql-server-2008

帮助!我的数据库中有一列是日期。不幸的是,我所有的日期都是字符串形式 (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/

相关文章:

MYSQL 日期范围 RFC 2822

php - MySQL Text 数据类型的作用类似于 Int 数据类型

mysql - 让 mySQL MONTH() 使用前导零?

sql-server - 将范围从 Excel 复制到 SQL 而不使用 For 循环?

sql-server - SQL Server 异步过程执行 : how to pass varbinary(MAX)?

php - 显示 2 位小数而不四舍五入

javascript - setInterval启动我的页面在生成30+数据时就卡顿了

mysql - 如何在一个查询中使用 Concat() 和 Substring?

sql - 带有 select_all 的 Rails 准备好的语句

sql-server - 什么是准备好的陈述?