【问题标题】: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。
  • 请显示示例数据和查询(省略您需要帮助弄清楚的部分)以及您对示例数据的期望结果。

标签: mysql sql oracle


【解决方案1】:

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

SELECT *
FROM yourTable
WHERE num REGEXP '^[0-9]{2}7';

在 Oracle 上,您可以使用 REGEXP_LIKE:

SELECT *
FROM yourTable
WHERE REGEXP_LIKE(num, '^[0-9]{2}7');

【讨论】:

  • 这是用大炮射麻雀
  • @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 会复杂吗?
猜你喜欢
  • 2022-01-27
  • 2014-01-29
  • 1970-01-01
  • 2021-10-23
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2012-04-10
相关资源
最近更新 更多