string - 将函数输出分配给 Postgres 变量的语法错误
问题描述
我正在尝试编写一个迁移,为表中的每个名称生成一个“排序名称”,其中排序名称与常规名称相同,除了 ' 替换为单个空格,名称转换为小写并且名称中的最后一个单词被移到前面。例如,“John L'Mann”变成“Mann John L”。为了做到这一点,我编写了一个临时函数:
CREATE FUNCTION generate_sort_name(name text) RETURNS text AS $$
DECLARE
without_quotes text;
split_name text[];
all_but_surname text;
BEGIN
without_quotes := (regexp_replace(name, '\''', 'g'));
split_name := (regexp_split_to_array(lower(without_quotes), '\s+'));
CASE WHEN (length(split_name) = 1) THEN RETURN split_name[1];
ELSE
all_but_surname := (array_to_string(split_name[1:length(split_name)-1], ' '));
return split_name[length(split_name)] || ' ' || all_but_surname;
END
END
$$ LANGUAGE plpgsql;
编辑:感谢您提供的信息,我已更正缺少分号和双引号的问题。现在在'END'处或附近出现语法错误 - 我尝试在最后一个'return'行的末尾使用分号或两个分号,以及有和没有分号。
解决方案
推荐阅读
- reactjs - 我可以更新减速器钩子内的外部状态吗?
- clickhouse - 如何旋转子组?
- c# - IIS - 线程池设置 machine.config 与 web.config
- winforms - 使用 ListView 所有者绘制的 DrawItem 大小与 LargeIcon ImageSize 不同
- python - 如何扩展绘图中的回归线?
- node.js - 如何使用 Nodejs 将 JSON 文件中的“null”值视为 null
- java - 如果第一个字符与模式不匹配,则正则表达式将相当,即使稍后应该匹配
- javascript - 如何防止浏览器在 contenteditable div 中生成 html 标签
- php - 如何对文档中的内部数组进行排序?
- x86 - 如何最有效地将常量(整数)值放入 avx _m256 寄存器的所有 8 个插槽中