Sql 雪花如果字符串模式替换

Sql 雪花如果字符串模式替换,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我有一列应该只包含数字[0-9],但在某些情况下,我们开始在该列中看到字母数字[例如:p8eSadfghrc]值。 我想写一个条件,如果值不是完全数字{0-9},我想用另一列中的另一个值替换它。类似这样的情况 update t set col = <other value> where regexp_like(col, '[^0-9]'); 更新t 设置列= 其中regexp_类似(col,“[^0-9]”); 这将更新数据。您也可以在查询中执行此操作: sele

我有一列应该只包含数字[0-9],但在某些情况下,我们开始在该列中看到字母数字[例如:p8eSadfghrc]值。 我想写一个条件,如果值不是完全数字{0-9},我想用另一列中的另一个值替换它。

类似这样的情况

update t
    set col = <other value>
    where regexp_like(col, '[^0-9]');
更新t
设置列=
其中regexp_类似(col,“[^0-9]”);
这将更新数据。您也可以在查询中执行此操作:

select t.*,
       (case when regexp_like(col, '[^0-9]') then <other value> else col end)
from t;
选择t.*,
(当regexp_类似于(列“[^0-9]”)时,则为else列结束)
从t;

在《雪花》中,我建议
尝试使用十进制()。它尝试将数字转换为十进制值(使用参数控制目标精度和比例),如果失败,则rturns
null

select t.*, case when try_to_decimal(mycol) is null then myothercol else mycol end newcol
from mytable
如果需要
update
语句:

update mytable
set mycol = myothercol
where try_to_decimal(mycol) is null

当没有第二个和第三个参数时,允许的位数是38,0位小数(这似乎是您想要的)。

如果值中有一个数字,则失败。表达式{regexp_like(col,[^0-9]')}相当于regex^[^0-9]$,当且仅当col是一个只包含一个非数字的字符串时,该表达式才为真。将其更改为{regexp_like(col,'.[^0-9].'')},您应该拥有所需的内容。@Zoom。如果列中的任何字符不是数字,则表达式返回true。即使是一个非数字也会返回true。这就是这个问题所要问的。