为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:
我遇到了一个问题,有个需求,将字段转换为数字,不是纯数字的转换为null,这是我写的sql,明明'2.1a1'不是纯数字,regexp_like('2.1a1', '[1]+(.[0-9]+)?$') =0,sql最后会走else,返回为null,但是sql在执行的时候报错了,提示字符串转换出错,难道达梦数据库有预执行的功能吗,then和else都会先执行一遍吗?
应该怎么改?
SELECT case
when
regexp_like('2.1a1', '^[0-9]+(\.[0-9]+)?$') =1
then cast('2.1a1' as decimal) || ''
else null
end
0-9 ↩︎
我这测试了一下,貌似是有你说的这个问题,你看看能否修改个计算方式
SELECT CAST(CASE WHEN regexp_like(VAL, '^[0-9]+(\.[0-9]+)?$') = 0 THEN NULL ELSE VAL END AS DEC ) FROM (SELECT '2.1a1' AS VAL)