web-dev-qa-db-fra.com

Lecture en boucle de valeurs supprimant 1 caractère à la fois

Je veux parcourir les valeurs et supprimer un caractère à la fois des valeurs et afficher le résultat.

Donc, si j'ai une table avec des valeurs:

ID
___
34679
13390
89906

Je veux que le résultat ressemble à ceci

Id
----
4679
679
79
9
3390
390
90
0
9906
906
06
6
10
Kashif Qureshi

Veuillez ne pas utiliser de boucles pour des choses comme ça (je réserverais également des CTE récursifs pour les scénarios où vous avez beaucoup moins de contrôle sur les choses, comme les hiérarchies). Les boucles sont mauvaises en SQL; SQL est optimisé pour fonctionner en ensembles.

DECLARE @foo TABLE(ID INT);

INSERT @foo VALUES(34679),(13390),(89906);

;WITH x AS 
(
  SELECT TOP (2048) n = ROW_NUMBER() OVER (ORDER BY Number)
  FROM master.dbo.spt_values ORDER BY Number
)
SELECT RIGHT(f.ID, x.n) FROM x
INNER JOIN @foo AS f
ON x.n < LEN(f.ID);

Résultats:

9
79
679
4679
0
90
390
3390
6
06
906
9906
19
Aaron Bertrand