Oracle 有一个名为的函数translate
,可用于将字符串中的单个字符替换为其他字符,其顺序与它们出现的顺序相同。它与函数不同,该replace
函数将整个第二个参数的出现替换为整个第三个参数。
translate('1tech23', '123', '456'); --would return '4tech56'
translate('222tech', '2ec', '3it'); --would return '333tith'
我需要这个来实现对 SQLite 数据库的搜索,忽略我的查询字符串上的口音(巴西葡萄牙语)。将要查询的表中的数据可能带有或不带有重音符号,因此,根据用户键入查询字符串的方式,结果会有所不同。
示例:搜索“maçã”,用户可以输入“maca”、“maça”、“macã”或“maçã”,表格中的数据也可能是四种可能之一。使用 oracle,我只会使用这个:
Select Name, Id
From Fruits
Where Translate(Name, 'ãç','ac') = Translate(:QueryString, 'ãç','ac')
...以及这些其他字符替换:
áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙãõÃÕäëïöüÄËÏÖÜâêîôûÂÊÎÔÛñÑçÇ
经过:
aeiouAEIOUaeiouAEIOUaoAOaeiouAEIOUaeiouAEIOUnNcC
当然,我可以嵌套多个对 Replace 的调用,但这不是一个好的选择。
在此先感谢一些帮助。