【问题标题】:Is it possible to use commodin in the left side of a LIKE operator?是否可以在 LIKE 运算符的左侧使用 commodin?
【发布时间】:2013-10-14 13:13:10
【问题描述】:

有没有办法可以在左侧至少使用_ 所以下面的语句返回1:

SELECT 1 FROM DUAL WHERE
'te_ephone' like 'tele_ho%'

我希望 oracle 在解析右侧时解析左侧,以使 _ 匹配“任何”字符。
这是可能的还是有任何解决方法可以使这项工作?

为了提供一些上下文,最终目标是 remoñoson 之类的内容与 remonos% 匹配。

左侧是一列,其中我用_ 替换了一些字符,而以查询开头的相同替换。

【问题讨论】:

  • 我假设您没有使用常量 - 任何一方都来自表格?
  • 左侧是经过一些处理后的列,而右侧是变量。检查编辑,非常感谢!
  • 我不知道 Oracle 的详细信息,但在大多数 DBMS 中,您可以使用排序规则定义字符列,其中 ñ 和 n 被认为是相等的。
  • ñ 事情被简化了,还有更多的事情被“降级”了。不过谢谢!

标签: sql regex oracle11g sql-like


【解决方案1】:

根据您的上下文,使用 Linguistic Sort 可以实现您所期望的,它提供了有关搜索语言字符串和排序的详细信息

Example1(不区分大小写或不区分重音的比较):-

SELECT word FROM test1
WHERE NLS_UPPER(word, 'NLS_SORT = XGERMAN') = 'GROSSE';

WORD
------------
GROSSE
Große
große

示例 2 使用带有基本字母运算符 [==] 的正则表达式:-

Oracle SQL 语法:

SQL> SELECT col FROM test WHERE REGEXP_LIKE(col,'r[[=e=]]sum[[=e=]]');

Expression: r[[=e=]]sum[[=e=]]
Matches:

简历

简历

简历

简历

【讨论】:

  • 非常感谢,问题是该列包含来自所有后期语言的特殊字符,因此它会有重音符号、ß、ñ 等...是否可以使用“基本字母运算符”一个单词?
  • 很遗憾,您不能对整个单词使用基本字母运算符,您能否提供有关您的要求的更多信息?
  • 我想要一列来匹配删除所有非 ascii 字符。到目前为止,我所做的是转换为 ASCII 并用 _ 替换?(对于非 ascii 字符),但如果我想要预期的行为,我需要在列中执行相同的操作。问题是该列存储来自欧洲各地的人的姓氏
  • 对于欧洲语言,您可以在两侧使用 NLS_UPPER 和 NLS_SORT=XWEST_EUROPEAN select nls_upper('Groñße','NLS_SORT=XWEST_EUROPEAN') from dual;
  • NLS_UPPER('GROÑßE','NLS_SORT=XWEST_EUROPEAN') ------------------------------ --------------- GROÑSSE 它没有删除ñ。奇怪...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2016-06-23
相关资源
最近更新 更多