在Snowflake中转换数字字符串

问题描述

您好,我使用SNowflake尝试将200k或200M之类的数字转换为200000和2000000000。 我是regex的新手,使用regex速查表可以创建其中有k的正则表达式字符串,但我无法用000代替k部分。

select REGEXP_REPLACE('234k','(^.*[Kk]$)','000')

有人可以帮我指出正确的方向或告诉我它是如何完成的吗?

谢谢!

解决方法

'(^.*[Kk]$)'匹配整个字符串,因此您将整个字符串替换为000

相反,您应该匹配[Kk]并将其替换为000

select REGEXP_REPLACE('234k','[Kk]','000')

请注意,您实际上并不一定要使用正则表达式,替换子字符串的正常函数也可以使用(我不知道Snowflake,但其文档建议使用REPLACE函数)。

,

这听起来像replace()

  select replace(replace(lower(col),'k','000'),'m','000000')
,

使用以下表达式:-

select REGEXP_REPLACE(REGEXP_REPLACE(<column,or string>,'[Kk]$','[Mm]$','000000');

$表示字符串的结尾,因此除非缩写正确且在结尾,否则不会替换。

测试:

//replace the k to 000 \
select REGEXP_REPLACE(REGEXP_REPLACE('15k','000000');  
//replace the m to 000000 \
select REGEXP_REPLACE(REGEXP_REPLACE('15m','000000'); 

//no replace \
select REGEXP_REPLACE(REGEXP_REPLACE('15k1','000000'); 
select REGEXP_REPLACE(REGEXP_REPLACE('15m1','000000'); 

注意:我在较早的答案中删除了\ d *,因为在匹配模式中无法使用\ d *并给出相同的结果。