2

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

在此先感谢一些帮助。

4

3 回答 3

3

用于 SQLite 的开源 Oracle 函数已在堪萨斯州立大学编写。它们包括 translate()(顺便说一句,完全支持 UTF-8),可以在此处找到。

于 2015-09-08T13:40:22.523 回答
2

我不相信 sqlite 中有任何东西可以像您描述的那样一次性翻译文本。

然而,这并不难实现为用户定义的函数。这是一个不错的入门参考

于 2012-12-19T19:06:51.897 回答
0

我用了replace

替换(字符串,模式,替换)

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

于 2020-04-16T14:46:30.437 回答