translate函数在Oracle中做了什么

时间:2015-07-22 21:55:19

标签: sql oracle decode

我知道解码功能,但不知道翻译中的内容是什么意思:

decode(translate(cookie_id,'0123456789','') = '','t',cookie_id,null) as cookie_id

decode((translate(pickup_date,'0123456789','') = '--' and length(pickup_date) = 10),'t',pickup_date,null) as pickup_date,

1 个答案:

答案 0 :(得分:2)

很简单。这个表达式:

translate(cookie_id, '0123456789', '')

返回NULL。 Oracle将空字符串视为NULL,甚至明确警告:

  

您不能使用空字符串来删除所有字符   in_string中的返回值。 Oracle数据库解释了   空字符串为null,如果此函数具有null参数,则   它返回null。

因此,第一个示例将始终为NULL生成cookie_id

很可能,作者想要的东西如下:

decode(translate(cookie_id, 'a0123456789', 'a'), '', cookie_id, null) as cookie_id

这将检查cookie_id是否仅包含数字,然后返回id。就个人而言,我发现更容易遵循正则表达式:

(case when regexp_like(cookie_id, '^[0-9]+$') then cookie_id end)

这不需要处理空字符串的时髦事情。