我已将数字数据转换为dd-mm-yyyy
格式的输出。我从表中提取数据的许多记录都包含日期,如0 0 99(m,d,yy)或99 99 99(mm,dd,yy)。企业要求这些数据元素在结果表中作为空白返回。数据结果中没有字段可以为空。
以下是我现在的代码:
,CASE
WHEN LEN(PSEFMO) = 1 AND PSEFMO > 0
THEN '0'
ELSE
REPLACE(CAST(PSEFMO AS VARCHAR(2)),'0',' ')
END + CAST(PSEFMO as varchar(2)) + '-' +
CASE
WHEN LEN(PSEFDA) < 2 AND PSEFDA <> 0
THEN '0'
ELSE ' '
END + CAST(PSEFDA as varchar(2)) + '-' +
CASE
WHEN (PSEFCT = 0) THEN '19' ELSE '20' END +
CASE
WHEN PSEFYR < 10 AND LEN(PSEFYR) = 1 AND PSEFYR <> 0
THEN '0'
ELSE ' '
END + CAST(PSEFYR as varchar(2))
AS [FROMDATE]
结果如下:
0- 0-19 0
11- 22-19 97
11- 22-19 97
0- 0-19 0
08-07-2009
05- 12-2005
08-09-2002
08-07-2009
0- 0-19 0
如何将0-0-19-0转换为空白并确保所有月份都从第一个位置开始?还要注意,字段PSEFCT输入数据是0或1如果它是0那么世纪是19如果1然后是20.我得到了这项工作但是我还需要删除这个字段....
任何帮助都将受到赞赏,因为这是生产转换问题。
谢谢。
答案 0 :(得分:0)
这应涵盖您列出的所有案例,这不会处理一个月内的错误日期(例如2月30日) 尽管如此,在发送数据之前将数据转换为日期的方法仍然有点像哈希?
编辑:交换大于标志的小于标志 编辑:愚蠢的程序员,我换出了小于值,以便它们比我想要的值高一个(&gt; 12不包括12但是&gt; 13确实如此) 编辑:添加了缺失的&#39;结束&#39;声明
,case
when PSEFYR = 99 then '21'
when PSEFCT = 0 then '19'
else '20'
end
+ case
when PSEFYR < 10 then '0' + Cast(PSEFYR as varchar(1))
else Cast(PSEFYR as varchar(2))
end
+ '-'
+ case
when PSEFMO = 0 then '01'
when PSEFMO < 10 then '0' + Cast(PSEFMO as varchar(1))
when PSEFMO < 13 then Cast(PSEFMO as varchar(2))
else '12'
end
+ '-'
+ case
when PSEFDA = 0 then '01'
when PSEFDA > 10 then '0' + Cast(PSEFDA as varchar(1))
when PSEFDA > 32 then Cast(PSEFDA as varchar(2))
else '31'
end AS [FROMDATE]