【发布时间】:2017-08-01 13:11:04
【问题描述】:
我需要编写一个基于用户输入两个字母匹配的查询,然后匹配客户表中以两者之间的任何字母开头的任何名称,并将它们放入游标中。我曾尝试使用REGEXP_LIKE,但无法让模式匹配,而且我的想法已经不多了
【问题讨论】:
标签: plsql oracle-sqldeveloper plsqldeveloper
我需要编写一个基于用户输入两个字母匹配的查询,然后匹配客户表中以两者之间的任何字母开头的任何名称,并将它们放入游标中。我曾尝试使用REGEXP_LIKE,但无法让模式匹配,而且我的想法已经不多了
【问题讨论】:
标签: plsql oracle-sqldeveloper plsqldeveloper
如果它们都以大写字母开头,那么只需使用BETWEEN
SELECT *
FROM table1
WHERE SUBSTR(UPPER("name"),1,1) BETWEEN 'C' AND 'G'
表格
name
Alan
Ben
Chris
Dave
Eddy
Fred
Gregg
Henry
输出
name
Chris
Dave
Eddy
Fred
Gregg
【讨论】:
G 的名称不在结果列表中。使用这个:between 'C' and chr(ascii('G') + 1)。此外,非 ascii 字符可能存在问题。
WHERE UPPER("name") BETWEEN 'C' AND 'G' 会起作用
这是您最初寻找的 REGEXP_LIKE 解决方案。匹配以 c-g 开头的不区分大小写。
select name
from table1
where regexp_like(name, '^[C-G].*', 'i');
【讨论】: