匹配在用户输入的两个字符之间开始的名称
Posted
技术标签:
【中文标题】匹配在用户输入的两个字符之间开始的名称【英文标题】:Match name that starts between two characters entered by the user 【发布时间】:2017-08-01 13:11:04 【问题描述】:我需要编写一个基于用户输入两个字母匹配的查询,然后匹配客户表中以两者之间的任何字母开头的任何名称,并将它们放入游标中。我曾尝试使用REGEXP_LIKE
,但无法让模式匹配,而且我的想法已经不多了
【问题讨论】:
【参考方案1】:如果它们都以大写字母开头,那么只需使用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
SQL 小提琴:http://sqlfiddle.com/#!4/7cf66/6/0
【讨论】:
带有G
的名称不在结果列表中。使用这个:between 'C' and chr(ascii('G') + 1)
。此外,非 ascii 字符可能存在问题。
@Dmitry 我同意,我可以使用一些示例数据/更多信息来提供更全面的答案
名称将始终为大写,没有非 ascii 字符,我可以添加 UPPER() 以确保正确?
是的,拥有WHERE UPPER("name") BETWEEN 'C' AND 'G'
会起作用
非常感谢您!我没有意识到 BETWEEN 会检查第一个字母【参考方案2】:
这是您最初寻找的 REGEXP_LIKE 解决方案。匹配以 c-g 开头的不区分大小写。
select name
from table1
where regexp_like(name, '^[C-G].*', 'i');
【讨论】:
以上是关于匹配在用户输入的两个字符之间开始的名称的主要内容,如果未能解决你的问题,请参考以下文章
求java正则表达式的例子,像js验证用户只可输入数字下划线字母的例子