我知道解码功能,但不知道翻译中的内容是什么意思:
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,
答案 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)
这不需要处理空字符串的时髦事情。