返回包含特定位置数字的字符串

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】:

对于正则表达式选项,您可以使用 mysqlREGEXP 运算符:

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 会复杂吗?

以上是关于返回包含特定位置数字的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Java语言中,怎么样查找一个特定的字符串,并返回它的索引位置

查找字符串中的特定数字并赋值

oracle中查找一个字符串中某个字符的位置是啥函数

检查蜂巢中特定位置的特定值

EXCEL用VBA提取字符串

python怎样对返回的一组数据进行特定条件提取,比如如图中怎样提取外观包含的内容,且只打印数字?