我想从电子邮件ID中删除元音.我应该使用哪种功能?我试图找到translate
和replace
postgresql 之间的区别,但没有得到确切的区别
Boh*_*ian 14
translate()
将一组单个字符(作为字符串传递)替换为另一组字符(也作为字符串传递),例如:
translate('abcdef', 'ace', 'XYZ') --> 'XbYdZf'
Run Code Online (Sandbox Code Playgroud)
replace()
取代了的出现串与其他的任意长度的字符串:
replace('abcdef', 'bc', 'FOO') --> 'aFOOdef'
Run Code Online (Sandbox Code Playgroud)
Cra*_*ger 11
在这种情况下,你可能真的想要regexp_replace
.
假设"元音"是指"西欧(英语)语言元音字母",您可以写:
SELECT regexp_replace('BobbafEtt@nerd.com', '[aeiou]', '', 'gi');
Run Code Online (Sandbox Code Playgroud)
在gi
第四参数写着"此正则表达式适用摹 lobally整个输入字符串不只是第一场比赛,并使它的情况下我 nsensitive".
请记住,w
并且y
有时是元音的声音,这取决于他们的背景下,太.您将无法使用正则表达式来处理它,因此这取决于您是否关心此目的.
如果您正在使用电子邮件地址,则不太可能需要处理其他字符集,因此正则表达式可能就此而定.
在大多数情况下,使用正则表达式修改单词并不是一个好方法; 例如,西里尔字母中的俄语A ? ? ? ? ? ? ? ? ?
用作元音.另外,根据语言的不同,同一个脚本中的相同字母可能也可能不是元音!继续阅读这里比你想知道的更多.
要消除“电子邮件 ID”中的所有元音,我能想到的最简单的表达式是:
translate(email_id, 'aeiou', '')
补充波希米亚人的答案:
和replace()
都可translate()
用于:
这两个函数都接受三个参数:
manipulated
:返回字符串将是该字符串的(可能)修改版本from
字符串,包含要在manipulated
字符串中找到的内容to
字符串,包含可能出现在输出字符串中的内容,具体取决于所使用的函数、字符串manipulated
和from
字符串不同之处在于replace()
只能替换整个字符序列,必须manipulated
以特定顺序在字符串中找到这些字符:
postgres=> select replace('foobarbaz', 'bar', 'FRED');
replace
------------
fooFREDbaz
(1 row)
Run Code Online (Sandbox Code Playgroud)
即使用空字符串替换它们:
postgres=> select replace('foobarbaz', 'bar', '');
replace
---------
foobaz
(1 row)
Run Code Online (Sandbox Code Playgroud)
from
但是,如果在字符串中无法按特定顺序找到字符串中的字符manipulated
,replace()
则返回与以下字符串相同的字符串manipulated
:
postgres=> select replace('foobarbaz', 'rab', '');
replace
---------
foobarbaz
(1 row)
Run Code Online (Sandbox Code Playgroud)
translate()
另一方面,不处理必须在所操作的字符串的特定序列中找到的字符子字符串,而是处理集合字符
字符串中存在的每个字符都会映射到字符串中与在字符串中找到的位置相同的另一个字符:manipulated
from
to
from
postgres=> select translate('foobarbaz', 'bar', '123');
translate
-----------
foo12312z
postgres=> select translate('foobarbaz', 'rab', '123');
translate
-----------
foo32132z
(1 row)
Run Code Online (Sandbox Code Playgroud)
在上面的第一个translate()
示例中,发生了以下映射:
'b'
-> '1'
(对于两次出现的'b'
)'a'
-> '2'
(对于两次出现的'a'
)'r'
-> '3'
(对于单次出现'3'
)虽然translate()
可用于如上所述映射字符,但它也可用于消除字符集。如果to
字符串比字符串短,就会发生这种情况from
:
postgres=> select translate('foobarbaz', 'rab', '1');
translate
-----------
foo1z
(1 row)
postgres=> select translate('foobarbaz', 'rab', '');
translate
-----------
fooz
(1 row)
Run Code Online (Sandbox Code Playgroud)
在上面的第一个示例中,发生了以下映射:
'r'
-> '1'
(对于单个出现的'r'
)'b'
-> 消除(对于 的两次出现'b'
)'a'
-> 消除(对于 的两次出现'a'
)而在上面的第二个示例中,由于字符串为空,因此所有出现的字符'r'
,'a'
和'b'
都被消除to
。
因此,要消除电子邮件 ID 中的元音,您可以执行以下操作:
translate(email_id, 'aeiou', '')
只要您关心的是ascii
元音,正如 Craig Ringer 的回答中提到的那样。
归档时间: |
|
查看次数: |
19395 次 |
最近记录: |