如何解决函数上的变量列名
我是 pgsql 的新手,但我有 8 年的 MSsql 经验,我想要实现的是:创建一个函数来应用它从名称中删除无效数据,它将删除所有特殊字符、数字和重音符号,只保留空格和 aZ 字符,我想在不同表的列上使用它,但我真的找不到我做错了什么。
这是我的代码:
CREATE OR REPLACE FUNCTION f_validaNome (VARCHAR(255))
RETURNS VARCHAR(255) AS
SELECT regexp_replace(unaccent($1),'[^[:alpha:]\s]','','g')
COMMIT
如果我跑
SELECT regexp_replace(unaccent(column_name),'g')
from TableA
解决方法
Postgres 中的函数不是这样编写的。
As documented in the manual 函数体必须作为字符串传递,你需要指定函数是用哪种语言编写的。函数可以用 SQL、PL/pgSQL、PL/python、PL/perl 和许多其他。也不需要按位置引用参数。传递 dollar quoted 字符串可以更轻松地编写函数体。
对于您正在做的事情,一个简单的 SQL function 就足够了。也没有必要使用像 255 这样的任意字符限制(与任何其他定义的最大长度相比,它确实具有任何性能或存储优势)。所以只需使用 text
。
CREATE OR REPLACE FUNCTION f_validanome (p_input text)
RETURNS text
AS
$body$ --<< string starts here.
SELECT regexp_replace(unaccent(p_input),'[^[:alpha:]\s]','','g'); --<< required ; at the end
$body$ --<< string ends here
language sql
immutable; --<< required ; at the end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。