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,但这不是一个好的选择。
先谢谢你的帮助。
答案 0 :(得分:2)
我不相信sqlite中有任何内容可以像你描述的那样在一次传递中翻译文本。
然而,作为user defined function实现这并不困难。这是一个不错的起点reference。
答案 1 :(得分:2)
SQLite的开源Oracle功能已在堪萨斯州立大学编写。它们包括translate()(顺便提一下完整的UTF-8支持),可以找到here。
答案 2 :(得分:0)