首页 > 解决方案 > postgres 函数从列中的数据中删除数字

问题描述

我找到了关于如何在 MSSQL 中创建函数以从 varchar 列中删除数值的 stackoverflow 答案,如果可能,我需要将其转换为 Postgres。这可能与成为一个函数有关,因为我需要在几个不同的数据库中多次使用它。

我已尽力转换 MSSQL 版本,但仍然无法正常工作,有人可以帮助填补空白吗?我根本不是数据库专家,谢谢!

CREATE Function public.RemoveNumericCharacters(Temp VarChar(1000))
Returns VarChar(1000)
AS $$
    Declare NumRange varchar(50) = '%[0-9]%';
    While PatIndex(@NumRange, Temp) > 0
        Set Temp = Stuff(Temp, PatIndex(@NumRange, Temp), 1, '')

    Return Temp
End
$$
LANGUAGE SQL;

对于更多的上下文 - 我需要这个列是一个电子邮件列,因此它需要将例如 testuser345@hotmail.com 转换为 testuser@hotmail.com。

标签: postgresqlfunctionvarchar

解决方案


不需要您自己的功能,这可以使用来实现regexp_replace()

select regexp_replace('testuser345@hotmail.com', '[0-9]+', 'g')

显然你可以把它放到一个函数中:

CREATE Function public.removenumericcharacters(p_input text)
 returns text
AS $$
    select regexp_replace(p_input, '[0-9]+', 'g');
$$
LANGUAGE SQL
immutable;

推荐阅读