SQLite函数的作用类似于Oracle的“翻译”功能吗?

时间:2012-12-19 17:52:43

标签: sql oracle sqlite

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,但这不是一个好的选择。

先谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

我不相信sqlite中有任何内容可以像你描述的那样在一次传递中翻译文本。

然而,作为user defined function实现这并不困难。这是一个不错的起点reference

答案 1 :(得分:2)

SQLite的开源Oracle功能已在堪萨斯州立大学编写。它们包括translate()(顺便提一下完整的UTF-8支持),可以找到here

答案 2 :(得分:0)

我使用了replace

REPLACE(字符串,图案,替换)

https://www.sqlitetutorial.net/sqlite-replace-function/