sql - 通过将值拆分为三个字符块来生成行
问题描述
示例数据:
'255002001255255001255001004002255007002'
有一个公式,每3个字符属于一个组,在这3个字符中,数字属于一个id。例如,前 3 个字符“255”属于组 1,而 255 与另一个表中的 id 相关。
255
002
001
255
255
001
255
001
004
002
255
007
002
我需要将每 3 个字符存储在来自表格的上述值中。我想使用存储此信息的 CTE,以便我可以在查询中引用它来生成报告。它是一个第三方数据库,所以我只有读取权限。
我想过使用SUBSTRING(tablevalue, 1,3)
,但不知道如何为整个价值继续这样做
解决方案
您可以使用递归 CTE。例如:
with cte as (
select left(@str, 3) as group_id, substring(@str, 4, len(@str)) as rest
union all
select left(rest, 3) as group_id, substring(rest, 4, len(rest)) as rest
from cte
where len(rest) >= 3
),
groups as (
select group_id
from cte
),
. . .
数据库的字符串函数略有不同,因此确切的函数取决于数据库。而且,一些数据库需要recursive
关键字。
推荐阅读
- android - 我们可以将表情符号从键盘显示到线性布局吗?
- unity3d - 某些设备无法加入 Photon PUN 中的房间。似乎无法找出原因?
- api - 在 react-native 上使用令牌访问(发送令牌作为参数)获取 api
- ios - 如何从 NEVPNManager IKEv2 获取连接失败的原因?
- angular - 如果路由解析器服务的类型为 void,则不会加载 http 请求
- javascript - 从状态数组获取特定值时未定义 - React Native
- css - Button Class 得到的不是 div 的全长?
- c++ - 这是什么''(常量向量
> &A)" 段代码是什么意思? - unity3d - Unity3d:如何从 HTTP 接收输入
- java - 即使从服务器删除后,数据仍显示在房间数据库中