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
;
परिणाम:
str | str
-----+-----
W | T
W | F
W | !
T | F
T | !
F | !
(6 rows)
दुर्भाग्य से मैं एक तरह से डबल स्ट्रिंग निरंतर से बचने के लिए नहीं मिल रहा। (लेकिन पूरी चीज को फ़ंक्शन में पैक किया जा सकता है) यदि कोई डुप्लिकेट वर्ण नहीं हैं (या आप उन्हें suppres करना चाहते हैं) तो आप idx के बजाय str पर एंटी-जॉइन कर सकते हैं।
अद्यतन (ypercube से संकेत) ऐसा लगता है कि ओपी चाहता है कि तारों को संयोजित किया जाए। तो यह हो सकता है ::
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
;
परिणाम: (... यहाँ पुनरावर्ती thingy आता है)
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
;
परिणाम 3:
results
---------
WT
WF
W!
TF
T!
F!
(6 rows)
UPDATE2
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)
क्यों आप एक डीबीएमएस में है कि क्या करना होगा से प्रेरित? क्या आप इसे एप्लिकेशन स्तर पर नहीं कर सकते? –
मैं सुडोकू-सॉल्वर में उपयोग का उपयोग कर सकता हूं ;-) – wildplasser
मैं इसे एकाधिक प्रोग्रामिंग भाषाओं में और केवल एक डेटाबेस PostgreSQL में उपयोग करूंगा, इसलिए मैं सोच रहा था कि यह एक ही स्थान पर यह सबसे आसान तरीका होगा। इसे स्ट्रिंग में शामिल होने की आवश्यकता नहीं है, मैं केवल परेशानी देता हूं कि काम कैसे करना चाहिए। – ffox003