好吧,所以我有一个奇怪的问题……表格中的日期已经输入为字符串值MMDDYYYY,我试图在报告中显示为MM / DD / YYYY,只选择最新的与ID相关的日期,因为某些ID可能有多个日期.
我的表示例:
ID | MyDate |
------+----------+
1 | 01302014 |
1 | 04222014 |
2 | 01302014 |
当我选择并插入临时表时,我想看到的是:
ID | MyDate |
------+-----------+
1 | 4/22/2014 |
2 | 1/30/2014 |
我知道将日期存储为字符串值是一种不好的做法,特别是在将它们存储为MMDDYYYY时,但是有没有人能够解决这个噩梦?
编辑
我忘了提一些字段可能是NULL.不确定这是否有所不同,但我认为如果我尝试使用Right,Left,Convert来翻转日期会有所作为.
最佳答案 这问题差不多一年前,坚果可能有人会发现它有用.
您需要将字符串转换为DATE格式,并使用ROW_NUMBER函数来窗口化结果集.
创建表格
DECLARE @tbl TABLE(Id INT, myDate VARCHAR(8))
样本数据
INSERT @tbl
SELECT 1 , '01302014' UNION ALL
SELECT 1 , '04222014' UNION ALL
SELECT 2 , '01302014'
询问
;WITH C AS(
SELECT ROW_NUMBER() OVER (PARTITION BY Id ORDER BY CONVERT(DATETIME, (SUBSTRING(myDate, 5, 4) + '.' + SUBSTRING(myDate, 1, 2) + '.' + SUBSTRING(myDate, 3, 2)), 101) DESC) AS Rn
,Id
,CAST(CONVERT(DATETIME, (SUBSTRING(myDate, 5, 4) + '.' + SUBSTRING(myDate, 1, 2) + '.' + SUBSTRING(myDate, 3, 2)), 101) AS DATE) AS myDate
FROM @tbl
)
SELECT Id, myDate
FROM C
WHERE Rn = 1