【问题标题】:SQL Server analog of Oracle's REGEXP_SUBSTROracle 的 REGEXP_SUBSTR 的 SQL Server 模拟
【发布时间】:2016-11-29 00:22:04
【问题描述】:

以下 Oracle 查询采用逗号分隔的值列表,例如 '3,4',并在单独的行中返回其各个标记,34

有人可以说明如何在 SQL Server 中做同样的事情吗?

SELECT REGEXP_SUBSTR('3,4','[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR('3,4', '[^,]+', 1, LEVEL) IS NOT NULL

【问题讨论】:

  • 如果你能展示一些样本数据和预期结果会很有帮助
  • @TheGameiswar - 一切都在帖子中:输入是一个字符串,'3,4'。如问题中所述,所需的输出是将值34 分开。 OP 展示了在 Oracle 中执行此操作的正确有效方法之一。他想知道如何在 SQL Server 中做到这一点。
  • @mathguy:我不太确定REGEXP_SUBSTR('3,4','[^,]+', 1, LEVEL),所以要求进行一些改进
  • @TheGameiswar - 好的,我编辑了帖子以使其更清晰。

标签: sql sql-server


【解决方案1】:

查询将使用递归 CTE。我认为这是逻辑:

with c as (
      select '3,4' as rest, NULL as val
      union all
      select stuff(rest, charindex(',', rest + ',') + 1),
             left(rest, charindex(',', rest + ',') - 1)
      from c
     )
select col
from c;

我应该注意到,Oracle 12c 支持递归 CTE,我(至少)发现它比 connect by 更直观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2016-07-11
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多