T-SQL并以MM.YYYY格式处理日期

时间:2017-01-27 10:16:42

标签: sql-server tsql datetime casting type-conversion

我目前正在后端开发一个带有SQL Server的报告应用程序。

将数据从csv文件中提取到表中。其中一个文件(包含财务数据)包含一个格式为MM.YYYY(04.2015,07.2016等)的财务期。

稍后人们会想要根据该时段查询该数据,例如04.2015和03.2016之间的任何数据。显然在字符串之间运行一个将导致无结果或不正确的数据。

处理此问题的最佳方法是什么?

  • 在导入时转换为日期(请记住日期时间数据类型需要一天)

  • 在WHERE子句中将字符串转换/转换为日期(在这种情况下如何处理MM.YYYY)

任何其他解决方案?

2 个答案:

答案 0 :(得分:1)

你是正确的,将它们存储为字符串将使查询变得缓慢和困难。将这些存储为正确的日期允许索引和更容易的查询。如果像04.2015这样的日期表示2015-04-01到2015-04-30的期间,那么我会存储period_startperiod_end日期列。这使得数据在这些日期所代表的内容中非常清楚。查看这些options for figuring out the last day of a month

将这些解析为正确日期的一种方法就是使用德语语言环境(dd.mm.yyyy)。你可以先加上'01'。到你的约会。

select convert(date, '01.05.2016', 104)

答案 1 :(得分:0)

我更喜欢第一个选项,在导入转换为日期时。您可以使用月份的第一天或月份的最后一天作为日期。那么你可以简单地过滤日期。

另一种简单的方法是,以下列格式将财务月份数据插入Integer

(YYYY*100)+MM
ie 04.2015 = (2015*100)+04 = 201504

然后您可以在WHERE子句

中的此整数列中进行简单过滤
... WHERE Fin_Month BETWEEN 201504 AND 201706