当前位置: 首页 > 知识库问答 >
问题:

删除postgreSQL中重音的函数[重复]

郭思淼
2023-03-14

可能重复:
PostgreSQL是否支持“重音不敏感”排序规则?

我试图删除重音,所以当我选择时,它会忽略它们。

例子:

SELECT * FROM table WHERE
table.id ILIKE 'Jose';

它返回:

José
Jose
Jósé
Jóse

或者类似的东西。

我发现这些函数无法工作,我想这可能是因为我使用的是Struts 1。十、 请检查它们,告诉我哪里错了,或者我应该使用什么其他功能。

第一个函数

CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text AS $$
DECLARE
    input_string text := $1;
BEGIN

input_string := translate(input_string, 'âãäåāăąÁÂÃÄÅĀĂĄ', 'aaaaaaaaaaaaaaa');
input_string := translate(input_string, 'èééêëēĕėęěĒĔĖĘĚ', 'eeeeeeeeeeeeeee');
input_string := translate(input_string, 'ìíîïìĩīĭÌÍÎÏÌĨĪĬ', 'iiiiiiiiiiiiiiii');
input_string := translate(input_string, 'óôõöōŏőÒÓÔÕÖŌŎŐ', 'ooooooooooooooo');
input_string := translate(input_string, 'ùúûüũūŭůÙÚÛÜŨŪŬŮ', 'uuuuuuuuuuuuuuuu');

return input_string;
END;
$$ LANGUAGE plpgql;

第二个功能

CREATE OR REPLACE FUNCTION norm_text_latin(character varying) 
  RETURNS character varying AS 
$BODY$ 
declare 
        p_str    alias for $1; 
        v_str    varchar; 
begin 
        select translate(p_str, 'ÀÁÂÃÄÅ', 'AAAAAA') into v_str; 
        select translate(v_str, 'ÉÈËÊ', 'EEEE') into v_str; 
        select translate(v_str, 'ÌÍÎÏ', 'IIII') into v_str; 
        select translate(v_str, 'ÌÍÎÏ', 'IIII') into v_str; 
        select translate(v_str, 'ÒÓÔÕÖ', 'OOOOO') into v_str; 
        select translate(v_str, 'ÙÚÛÜ', 'UUUU') into v_str; 
        select translate(v_str, 'àáâãäå', 'aaaaaa') into v_str; 
        select translate(v_str, 'èéêë', 'eeee') into v_str; 
        select translate(v_str, 'ìíîï', 'iiii') into v_str; 
        select translate(v_str, 'òóôõö', 'ooooo') into v_str; 
        select translate(v_str, 'ùúûü', 'uuuu') into v_str; 
        select translate(v_str, 'Çç', 'Cc') into v_str; 
        return v_str; 
end;$BODY$ 
  LANGUAGE 'plpgsql' VOLATILE; 

在NetBeans中运行文件时,这两个函数都会生成以下错误:

ERROR: unterminated dollar-quoted string at or near "*the string that starts the function*"

共有1个答案

周弘毅
2023-03-14

使用PostgreSQL附带的uncent模块。

somedb=# CREATE EXTENSION unaccent;
CREATE EXTENSION
somedb=# SELECT unaccent('Hôtel');
 unaccent
----------
 Hotel

somedb=# SELECT * FROM table WHERE lower(unaccent(table.id)) = lower('Jose');

并通过生成一个无重音、大小写的索引来加快速度:

somedb=# CREATE INDEX CONCURRENTLY ON table (lower(unaccent(id)));
 类似资料:
  • 问题内容: (据我所知)Android中是否有任何方法都没有java.text.Normalizer从字符串中删除任何重音符号。例如,“éàù”变成“ eau”。 如果可能,我想避免解析String来检查每个字符! 问题答案: 在Android中可用(无论如何都是最新版本)。您可以使用它。 编辑 供参考,这里是如何使用: (从下面评论中的链接粘贴)

  • 因此,我有一个名为的postgresql表,其中有两列:和。列是jsonb类型的,指定给定日期时间的各种状态数据。下面是该表的一个示例: 如果我想删除两个json项的重复项,该怎么办?例如,

  • 问题内容: 我遇到了一个问题Python- 仅通过使用filter和lambda 删除列表中的重复项,OP询问如何使用独占和函数从Python列表中删除重复项。 这让我感到奇怪,从理论的角度来看,是否可以仅使用函数从Python列表中删除重复项? 如果是这样,我们该怎么做? 在这种情况下,“删除重复项”是指“仅使原始列表中存在的每个元素出现一次”,因此应变为。 另外,目标是只编写一个,因此代码将像

  • 问题内容: 我刚刚编译了一个包含100万个地名的数据库。我将在自动完成的小部件中使用它来查找城市。这些地方很多都带有重音符号…我希望能够在用户键入不带重音符号的名称时查找记录。 为了做到这一点,我在第二栏中有一个名字的重音符号。这些记录中的许多记录仍然是空白的,因此我想编写一个查询来填充它们。在直接的MySQL中可能吗?如果是这样,怎么办? 问题答案: 如果您为该列设置了适当的排序规则,则该字段中

  • 问题内容: 我有一个包含我的对象的数组。每个人都有财产。 有没有比我的数组中找到重复的帖子ID的更有效方法? 问题答案: 我将建议2解决方案。 两种方法都必须是平等的 使帖子符合可哈希和平等 在这里,我假设您的struct(或类)具有type 的属性。 解决方案1(丢失原始订单) 要删除重复的内容,您可以使用 解决方案2(保留订单)

  • 我想删除double[]数组中的重复项。不幸的是,我不能使用ArrayList或其他任何东西,它必须是“普通”双数组。我试图使用类数组的binarySearch()方法,但找不到一个很好的解决方案,因为我不仅要搜索,还要删除重复项。那么,每次删除这样的副本时,我都必须缩短长度。 这个问题有什么解决办法吗?