DB2 CASE WHEN THEN 向所有值添加两个额外的空值

Posted

技术标签:

【中文标题】DB2 CASE WHEN THEN 向所有值添加两个额外的空值【英文标题】:DB2 CASE WHEN THEN adding two extra nulls to all values 【发布时间】:2015-01-19 12:16:45 【问题描述】:

我今天收到一个初级程序员发来的一个奇怪问题。

在一个 DB2 SQL 语句中,他切换了一个

select [Value]

原来的结果是

AAAAAA
CCCCCC
BBBBBB
DDDDDDDDDDD
EE

select 
CASE [Value] 
  WHEN 'AAAAAA'     
    THEN 'AAAA'          
  WHEN 'BBBBBB'                  
    THEN 'BBBBBBBB'          
  ELSE [Value]                
  END 

新结果是

..AAAA............
..CCCCCC
..BBBBBBBB........
..DDDDDDDDDDD
..EE

在哪里。表示一个空

我想了解是什么导致两个额外的空值出现在非选定值中?

【问题讨论】:

空值?你说的是 one 列包含'..AAAA............',对吗?那你说的是空白吗?还是二进制零?突然间,每个检索到的值都添加了两个前导字符,加上给定文字的几个尾随字符? 我不知道 DB2 支持方括号。 【参考方案1】:

什么 DB2 版本和平台? 此语句是否直接在 SQL 客户端界面中运行?或者它是在一个存储过程中,其结果正在被某些东西解释?

在我看来,返回的数据类型似乎已从固定长度 CHAR 更改为 VARCHAR,并且正在读取结果的任何内容仍在将其处理为 CHAR。

字符串文字总是被解释为 VARCHAR。

如果是这种情况,请更正调用应用程序或将 VARCHAR 转换为 CHAR。

select 
CASE [Value] 
  WHEN 'AAAAAA'     
    THEN CHAR('AAAA', 30)          
  WHEN 'BBBBBB'                  
    THEN CHAR('BBBBBBBB', 30)          
  ELSE [Value]                
END 

【讨论】:

"字符串文字总是被解释为 VARCHAR" 这是有道理的。谢谢!

以上是关于DB2 CASE WHEN THEN 向所有值添加两个额外的空值的主要内容,如果未能解决你的问题,请参考以下文章

case when 使用

请教一下数据库case when then end空值问题

SQL case when

存储过程里面的CASE,WHEN,THEN的用法

MYSQL case when 的两种用法

SQL语句中case,when,then的用法