我正在尝试修复新年后SSRS中出现的查询。我们有来自其他应用程序的输入。它抓取日期并将其存储为varchar
。然后,SSRS报告会提取前100个日期'但是当2017年的日期到来时,这不在前100名。
现有查询如下
SELECT DISTINCT TOP (100)
FROM DenverTempData
ORDER by BY Date DESC
日期存储为VARCHAR
。很明显,这个查询并没有抓住像01012017
那样的值作为前100名(超过像12312016这样的值)。我想也许我可以简单地将此列的数据类型更改为datetime
。但是信息来自平面文件并被转换,因此它更难一点。因此,我希望在将日期列转换为datetime
或仅将日期转换为最后100个日期时,选择不同的前100名。
有人可以帮助查询语法吗?我正在考虑使用强制转换将varchar
转换为date
,但如何使用不同的前100名进行格式化?我只是想按照时间顺序从存储为varchar
但包含代表date
的字符串的列中检索最后100个日期。
希望这是有道理的
答案 0 :(得分:1)
将日期存储为字符串始终是个坏主意。这是具有高度文化特色的!
您可以将格式化的字符串日期转换为如下所示的实际日期:
DECLARE @DateMMDDYYYY VARCHAR(100)='12312016';
SELECT CONVERT(DATE,STUFF(STUFF(@DateMMDDYYYY,5,0,'-'),3,0,'-'),110)
转换后,您的排序(以及TOP 100
)应该按预期工作。
我的强烈建议:尝试将您的日期存储在实际日期类型的列中,以避免出现这种情况!
答案 1 :(得分:0)
SELECT DISTINCT TOP 100 (CAST(VarcharColumn as Date) as DateColumn)
FROM TABLE
Order by DateColumn desc