在SQL中将Number转换为空格

时间:2014-09-24 19:12:38

标签: sql sql-server date casting

我已将数字数据转换为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.我得到了这项工作但是我还需要删除这个字段....

任何帮助都将受到赞赏,因为这是生产转换问题。

谢谢。

1 个答案:

答案 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]