sql - 如何将字符串拆分为行?
问题描述
我有以下查询。我需要从表中提取每个订单号(唯一标识符)的参考。我最终会有类似的东西:
Order ID Ref
A Xz|Yz
但我想拥有:
Order ID Ref
A Xz
A Yz
问题是每个订单 ID,我可以或多或少地连接引用,但它们总是用'|'
.
我需要以某种方式使用 Select 语句(以上面建议的格式读取 Tableau 中的数据)。
有人对如何实现这一目标有任何想法吗?
解决方案
在 Oracle 中,您可以使用带有CONNECT BY
and的递归查询REGEXP_SUBSTR
:
SELECT order_id, TRIM(REGEXP_SUBSTR(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
ORDER BY order_id, ref
WITH t AS (
SELECT 'A' order_id, 'Xz|Yz' ref FROM DUAL
)
SELECT order_id, trim(regexp_substr(ref, '[^|]+', 1, level)) ref
FROM t
CONNECT BY instr(ref, '|', 1, level - 1) > 0
order by order_id, ref
ORDER_ID | 参考 :------- | :-- 一个 | Xz 一个 | YZ
推荐阅读
- php - PHP - 从表中选择随机行
- java - Minecraft Forge 修改不适用于非 OP 玩家的专用服务器
- python - 如何在 python / selenium 中正确处理 2-factor auth
- reactjs - 从支付网关重定向后出现 405 HTTP 错误
- c - 自适应网格细化
- node.js - 如何从所有分片中获取 users.cache 并将它们放入集合中,就像集合 client.user.cache 返回一样?
- android - Nativescript如何删除android中的状态栏色调(角度打字稿)
- c# - 字符串路径是正确的,但在 .zip 提取 c# 时出错
- python - 如何从文本文件中提取行(包含特定字符)?
- c++ - UDP 广播数据包被 tcpdump 看到,但没有被 linux 套接字接收