gpt4 book ai didi

sql - 将 varchar MMDDYYYY 转换为 MM/DD/YYYY 日期时间并仅选择最近的日期

转载 作者:行者123 更新时间:2023-12-03 03:22:55 30 4
gpt4 key购买 nike

好吧,我遇到了一个奇怪的问题...表中的日期已作为字符串值 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。不确定这是否有影响,但我认为如果我尝试使用右、左、转换来翻转日期,就会有影响。

最佳答案

这个问题是差不多一年前的问题了,也许有人会觉得它有用。

您需要将字符串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

SQLFiddle Demo

关于sql - 将 varchar MMDDYYYY 转换为 MM/DD/YYYY 日期时间并仅选择最近的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297326/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com