匹配在用户输入的两个字符之间开始的名称

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');

【讨论】:

以上是关于匹配在用户输入的两个字符之间开始的名称的主要内容,如果未能解决你的问题,请参考以下文章

删除PHP中两个单词之间的空格[重复]

为啥从标准输入读取用户输入时我的字符串不匹配?

求java正则表达式的例子,像js验证用户只可输入数字下划线字母的例子

c++程序设计题,编写一个程序,实现两个数之间的四则运算,直至用户输入字符"N"非常感谢!!!

从用户输入中识别名称

两个均检查字符串的等号方法