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,但这不是一个好的选择。
提前感谢一些帮助。
最佳答案
堪萨斯州立大学为 SQLite 编写了开源 Oracle 函数。它们包括translate()(顺便说一句,完整的UTF-8支持)并且可以在here中找到。 .
关于SQLite 函数的工作原理与 Oracle 的 "Translate"函数类似吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958210/