如何在SQL中调整ORGDate字段的日期格式?
解决ORGDate日期转换问题
你之前用convert(datetime, CONVERT(float,ORGDate))得到错误结果,是因为SQL Server把float转datetime时,会把数值当成1900-01-01以来的天数,而你的ORGDate是「月份+日期+年份后两位」的数字编码,不是天数,所以完全不匹配。
针对你的数据结构(5位数字,规则:月份1-12(1或2位)+日期(2位)+年份后两位(2位)),可以用字符串拆分拼接的方式处理:
SELECT ORGDate, -- 转换为期望的MM/DD/YY格式 CONVERT(VARCHAR(10), CONVERT(DATETIME, CASE -- 处理两位数月份(10-12):前两位是月份,第3位补零为两位日期,最后两位是年份 WHEN LEFT(CAST(ORGDate AS VARCHAR(10)), 2) IN ('10','11','12') THEN LEFT(CAST(ORGDate AS VARCHAR(10)), 2) + '/' + RIGHT('0' + SUBSTRING(CAST(ORGDate AS VARCHAR(10)), 3, 1), 2) + '/' + RIGHT(CAST(ORGDate AS VARCHAR(10)), 2) -- 处理一位数月份(1-9):第一位是月份,第2-3位是日期,最后两位是年份 ELSE LEFT(CAST(ORGDate AS VARCHAR(10)), 1) + '/' + SUBSTRING(CAST(ORGDate AS VARCHAR(10)), 2, 2) + '/' + RIGHT(CAST(ORGDate AS VARCHAR(10)), 2) END, 1 -- 输入格式为MM/DD/YY ), 1 -- 输出格式为MM/DD/YY ) AS ExpectedDate FROM YourTableName
验证结果:
| ORGDate | ExpectedDate |
|---|---|
| 10291 | 10/02/91 |
| 63098 | 06/30/98 |
| 22282 | 02/22/82 |
关于年份世纪:SQL Server默认会把年份后两位50-99映射为1950-1999,00-49映射为2000-2049,符合你的需求。
内容的提问来源于stack exchange,提问作者Alyssa Brouillet
相关产品推荐
相关产品推荐

