Découper une chaîne en sous-chaînes de longueur fixe

Certains me désignent sur le forum SQL Server comme l’homme qui murmure à l’oreille des CTE.
En voici donc une nouvelle !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
---------------------------------
-- Nicolas SOUQUET - 01/07/2009 -
---------------------------------
DECLARE @toto VARCHAR(50) = 'ABCDEFGHIJKLM'
SELECT LEN(@toto)
 
;WITH
  CTE AS
  (
      SELECT SUBSTRING(@toto, 1, 4) AS sousChaine,
          1 AS nFinSousChaine
    UNION ALL
      SELECT SUBSTRING(@toto, nFinSousChaine + 4, 4) AS sousChaine,
          nFinSousChaine + 4 AS nFinSousChaine
      FROM CTE
      WHERE nFinSousChaine <= LEN(@toto)
  )
SELECT sousChaine
FROM CTE
WHERE nFinSousChaine <= LEN(@toto)

Retourne :

sousChaine
———-
ABCD
EFGH
IJKL
M

ElSuket

Laisser un commentaire