在Postgresql版本15中,我有两个表,它们可能包含相同的对象。在这两个表(即architecture_permissions
和experts_conclusion
)中,我都有名为object_name
的列。我的任务如下:
1.检查列值是西里尔文还是拉丁文。如果值是西里尔文,则将其翻译为拉丁文。我使用这样的函数:CREATE OR REPLACE FUNCTION cyrillic_transliterate(p_string text) RETURNS varying AS $BODY$ SELECT replace(replace(replace(replace(replace(replace(replace(replace(translate(lower($1, 'абвгдеёзийклмнопрстуфхцэы, 'abvgdeezijklmnoprstufхcey'), 'ж','zh'),'ч', 'ch'), 'ш', 'sh'), 'щ', 'shh'), 'ъ', ''), 'ю, 'yu'), 'я', 'ya'), 'ь', ''); $BODY$ LANGUAGE SQL IMMUTABLE COST 100;
个
1.检查哪些表列具有较长的值,然后检查较长的列是否包含较小的值。例如:
在architecture_permissions
表中,列object_name
具有值:
这是一个很好的例子。
从cyrillic_transliterate
函数的音译给出了这样的结果:
jizza shahar ittifoq mahallasi loyihadagi ko'chasi judududida joylashgan fuqaro jajitbaev oybek o'ral o'g'liga tegishli non-tegishli bronzona binosini 2-qavatli qilib rekonstruksiya qilish
在experts_conclusion
表中,列object_name
具有值:
哈伊特巴耶夫加·诺沃乔纳西尼·雷孔斯特鲁克西亚·吉利什·乌春
单词可能顺序不同、拼写错误或有后缀或前缀:
ajitbaev -> Xajitbaevga nonkonzona-> nonvoyxonasini rekonstruksiya -> rekonstuksiya
如果有多个单词超过3个匹配较长的列,则将它们连接起来。例如:
jizza shahar ittifoq mahallasi loyihadagi ko'chasi judududida joylashgan fuqaro jajitbaev oybek o'ral o'g'liga tegishli non-tegishli bronzona binosini 2-qavatli qilib rekonstruksiya qilish
包含文字:
农沃伊肖纳、列孔斯特鲁克西亚、吉利什·沙伊特巴耶夫
然后将这两个记录合并。
1条答案
按热度按时间kninwzqo1#
您的函数可以被修复/优化:
字符串
translate()
可以用 nothing 替换字符,如演示所示。关于
PARALLEL SAFE
:“剩下的问题现在还很模糊"