Cast varchar as date select distinct 前 100

Cast varchar as date select distinct top 100

我正在尝试修复新年后 SSRS 中出现的查询。我们有一个来自另一个应用程序的输入。它抓取一个日期并将其存储为 varchar。然后 SSRS 报告获取前 100 名 'dates' 但是当 2017 年日期到来时,它不在前 100 名中。

现有查询如下

SELECT DISTINCT TOP (100)
FROM DenverTempData
ORDER by BY Date DESC

日期存储为 VARCHAR。很明显,此查询不会将 01012017 之类的值作为前 100 名(超过 12312016 这样的值)。我想也许我可以简单地将此列上的数据类型更改为 datetime。但是信息来自一个平面文件并经过转换,所以它有点困难。所以我希望在将日期列转换为 datetime 或只是日期并获取最后 100 个日期的同时,对不同的前 100 个日期进行 select。

有人可以帮忙查询语法吗?我正在考虑将 varchar 转换为 date,但如何使用不同的前 100 名进行格式化?我只是想从存储为 varchar 但包含表示 date 的字符串的列中按时间顺序检索最后 100 个日期。

希望这是有道理的

SELECT  DISTINCT TOP 100 (CAST(VarcharColumn as Date) as DateColumn)
FROM TABLE
Order by DateColumn desc 

将日期存储为字符串总是一个坏主意。这是高度特定于文化的!

您可以将格式化的字符串日期转换为真实日期,如下所示:

DECLARE @DateMMDDYYYY VARCHAR(100)='12312016';

SELECT CONVERT(DATE,STUFF(STUFF(@DateMMDDYYYY,5,0,'-'),3,0,'-'),110)

转换后您的排序(因此 TOP 100)应该按预期工作。

强烈建议:尽量将日期存储在真实日期类型的列中,以避免此类麻烦!