我目前正在后端开发一个带有SQL Server的报告应用程序。
将数据从csv文件中提取到表中。其中一个文件(包含财务数据)包含一个格式为MM.YYYY(04.2015,07.2016等)的财务期。
稍后人们会想要根据该时段查询该数据,例如04.2015和03.2016之间的任何数据。显然在字符串之间运行一个将导致无结果或不正确的数据。
处理此问题的最佳方法是什么?
在导入时转换为日期(请记住日期时间数据类型需要一天)
在WHERE子句中将字符串转换/转换为日期(在这种情况下如何处理MM.YYYY)
任何其他解决方案?
答案 0 :(得分:1)
你是正确的,将它们存储为字符串将使查询变得缓慢和困难。将这些存储为正确的日期允许索引和更容易的查询。如果像04.2015这样的日期表示2015-04-01到2015-04-30的期间,那么我会存储period_start
和period_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