如何在case语句中检测字段的值是否为字符串" 0"在oracle?

时间:2014-10-13 03:44:42

标签: sql oracle

在oracle中,如何在case语句中检测字段的值是否在" 0"中,然后将其设置为""? 因为我在使用这样的东西时检测到它有问题

case 
  when REGEXP_LIKE (ctyid, '^[:DIGIT]') then '""'

它不起作用,我仍然得到" 0"在输出中...我想将其设置为""

2 个答案:

答案 0 :(得分:1)

如果要在字符串中的任何位置查找0,请使用LIKE运算符:

WHEN ctyid LIKE '%0%' THEN NULL

如果在字符串中的任何地方找到0,那将返回NULL值。

如果要将值本身设为0,请使用=运算符。

WHEN ctyid = '0' THEN NULL

CASE看起来更容易阅读,但同一个表达式可写为DECODE

DECODE(cytid, '0', NULL, cytid)

答案 1 :(得分:1)

请参阅Regular Expression Syntax in ORACLE

的文档

正确的表达应该是:

case 
  when REGEXP_LIKE (ctyid, '^[[:digit:]]') then '""' else ctyid end

OR

case 
  when REGEXP_LIKE (ctyid, '^\d') then '""' else ctyid end

但是您的示例代码会将所有ctyid首字母与一个数字匹配,而不仅仅是0

<强>更新

根据@ LalitKumarB的评论,我必须附加以下代码,我认为它应该由OPself完成。

case 
  when REGEXP_LIKE (ctyid, '^0') then '""' else ctyid end