【发布时间】:2014-09-24 19:12:37
【问题描述】:
我已将我的数字数据转换为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。我得到了这项工作,但是我还需要清除该字段....
任何帮助将不胜感激,因为这是生产转换问题。
谢谢。
【问题讨论】:
-
判断某一行是否应该用空白代替的逻辑是什么?我不确定我是否理解您想要的输出。
-
你能给我们举个例子,说明一些好的和坏的传入行,包括你在
CASE语句中使用的所有列吗? -
现在希望它有点不同的权力:我要使输入数据看起来像这样 00/00/00 = 1901-01-01 和输入数据看起来像这样 99 /99/99 = 2199/12/31。没有返回的结果应该有一个空白...
-
所有的值都是整数吗?
-
@orgtigger,数值为十进制 (2)
标签: sql sql-server date casting