set search_path='tmp';
WITH ztab AS (
SELECT idx as idx
, substring ('WTF!' FROM idx FOR 1) as str
FROM generate_series(1, char_length('WTF!')) idx
)
SELECT t1.str, t2.str
FROM ztab t1
JOIN ztab t2 ON t2.idx > t1.idx
;
Ergebnis:
str | str
-----+-----
W | T
W | F
W | !
T | F
T | !
F | !
(6 rows)
Leider kann ich nicht einen Weg finden, den Doppel-String konstant zu vermeiden. (aber die ganze Sache könnte in eine Funktion gepackt werden) Wenn es keine doppelten Zeichen gibt (oder du sie unterdrücken willst), könntest du den Anti-Join auf der Str anstelle der IDX machen.
UPDATE (Hinweis von Ypercube) Es scheint, dass das OP möchte die Zeichenfolgen verkettet werden. So seien es ::
WITH ztab AS (
SELECT idx as idx
, substring ('WTF!' FROM idx FOR 1) as str
FROM generate_series(1, char_length('WTF!')) idx
)
SELECT t1.str || t2.str AS results
FROM ztab t1
JOIN ztab t2 ON t2.idx > t1.idx
;
Ergebnisse:
results
---------
WT
WF
W!
TF
T!
F!
(6 rows)
UPDATE2: (hier kommt das rekursive Dingen ...)
WITH RECURSIVE xtab AS (
WITH no_cte AS (
SELECT
1::int AS len
, idx as idx
, substring ('WTF!' FROM idx FOR 1) as str
FROM generate_series(1, char_length('WTF!')) idx
)
SELECT t0.len as len
, t0.idx
, t0.str
FROM no_cte t0
UNION SELECT 1+t1.len
, tc.idx
, t1.str || tc.str AS str
FROM xtab t1
JOIN no_cte tc ON tc.idx > t1.idx
)
SELECT * FROM xtab
ORDER BY len, str
-- WHERE len=2
;
Ergebnisse 3:
len | idx | str
-----+-----+------
1 | 4 | !
1 | 3 | F
1 | 2 | T
1 | 1 | W
2 | 4 | F!
2 | 4 | T!
2 | 3 | TF
2 | 4 | W!
2 | 3 | WF
2 | 2 | WT
3 | 4 | TF!
3 | 4 | WF!
3 | 4 | WT!
3 | 3 | WTF
4 | 4 | WTF!
(15 rows)
Warum Sie, dass in einem DBMS tun würde? Können Sie das nicht auf einer Anwendungsebene tun? –
Ich könnte in einem Sudoku-Solver nützlich sein ;-) – wildplasser
Ich würde dies in mehreren Programmiersprachen und nur eine Datenbank PostgreSQL verwenden, also dachte ich, dass dies der einfachste Weg wäre, dies an einer Stelle zu haben. Dies muss nicht zu einer Zeichenfolge hinzugefügt werden, ich gebe nur eine Umfrage, wie sollte funktionieren. – ffox003