首页 > 解决方案 > 通过将值拆分为三个字符块来生成行

问题描述

示例数据:

'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),但不知道如何为整个价值继续这样做

标签: sqlsql-serverstring

解决方案


您可以使用递归 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关键字。


推荐阅读