是否可以通過一次選擇所有列解碼來完成,而不是單獨選擇它們?
沒有
然而,除了使用支點,我看到的唯一解決辦法是使用PL/SQL:
1,本是我如何模擬你的表
SELECT *
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS
(SELECT 0, 1, 2, 0, 3, 2 FROM DUAL)
SELECT *
FROM tb1)
2.I將列,它們之間用逗號追加在一起,並將它們保存到字符串表
SELECT col_a || ',' || col_b || ',' || col_c || ',' || col_d || '.' || col_e || ',' || col_f
FROM (WITH tb1 (col_a, col_b, col_c, col_d, col_e, col_f) AS (SELECT 0, 1, 2, 0, 3, 2 FROM DUAL)
SELECT *
FROM tb1)
3.Then我會用REGEXP_REPLACE
以每次
SELECT REPLACE (REGEXP_REPLACE (REPLACE ('0,1,2,0,3,2', 0, 'S'), '[1-2]', 'F'), 3, 'NA') COL_STR
FROM DUAL
4.更換您的值一列使用動態SQL我會使用ROWID或任何你打算做更新表。我提出這個SQL將串入列
SELECT REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 1) AS COL_A,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 2) AS COL_B,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 3) AS COL_C,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 4) AS COL_D,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 5) AS COL_E,
REGEXP_SUBSTR (COL_STR, '[^,]+', 1, 6) AS COL_F
FROM tst1)
所有這一切都是非常繁瑣的,它可能需要一些時間分開。使用DECODE
或CASE
將更容易查看和解釋,因此更容易維護。
如果你想在一列顯示結果是可能的。但是,您的輸出表明您希望結果位於多列中。所以我的答案是不可能的。您將不得不多次使用解碼/外殼 –
通過重新分析表格,解碼產生的單個行,然後迴轉到原始佈局,但它幾乎肯定不值得做額外的工作,而且它會更簡單,更清晰地解碼每個列。 –