返回包含特定位置数字的字符串
Posted
技术标签:
【中文标题】返回包含特定位置数字的字符串【英文标题】:Return strings which contains number on specific position 【发布时间】:2020-09-07 06:40:40 【问题描述】:我是 SQL 查询的基础,我需要一些帮助。 我必须选择所有包含数字的字符串值,例如7 仅在该字符串中的特定位置。
例如: 我有字符串:987654321,如果在位置 3 我会有数字 7,那么应该选择它。 所以在例子中这个字符串将被选中,因为在第三个位置我有数字 7。
是否有任何 SQL 函数可以帮助我?
编辑:
示例表
TABLE
Numbers Value
987654321 1
123456789 2
789009871 3
654321092 4
847949372 5
输出:
TABLE
Numbers Value
987654321 1
847949372 5
声明:
SELECT table.numbers
FROM TABLE
WHERE substr(table.numbers,3,1)='7' <--- what to do here? --->
非常感谢。
【问题讨论】:
where substr(stringcol, 3, 1) = '7'
找到 7。使用 replace 验证只有一个 7。
请显示示例数据和查询(省略您需要帮助弄清楚的部分)以及您对示例数据的期望结果。
【参考方案1】:
对于正则表达式选项,您可以使用 mysql 的 REGEXP
运算符:
SELECT *
FROM yourTable
WHERE num REGEXP '^[0-9]27';
在 Oracle 上,您可以使用 REGEXP_LIKE
:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(num, '^[0-9]27');
【讨论】:
这是用大炮射麻雀 @ClausBönnhoff 不,一点也不。假设我们想根据位置匹配某个模式,Regex 是一个不错的选择。 可能是个愚蠢的问题,但是您的陈述中的 num 是什么,不知道在我的示例中如何替换它。 在您的示例中,num
将是包含值的列的名称,例如987654321
您正在尝试验证。
不幸的是 REGEX 表达式对我不起作用.. 输出为 0。【参考方案2】:
你应该使用case语句。
select case when substr(stringcol, 3,1) = '7' then stringcol else "not valid" end as stringcol from <Table Name>
【讨论】:
如果我提到这些列的类型是 CHAR 会复杂吗?以上是关于返回包含特定位置数字的字符串的主要内容,如果未能解决你的问题,请参考以下文章