[英]Why is CASE - WHEN - ELSE not working for me in pgadmin in this once instance?
使用 postgres 9.4 並使用 PGAdmin III:我有一個帶有字符字段的模式,該字段可能包含“換行符”(NL),或者可能包含雙空格,或者兩者都不包含。 我需要根據上述因素或 26 個字符的長度將字段分成 3 段。
如果總長度小於或等於 26,我就照原樣復制。 如果它有 NL,那么我將它除以那些。 如果沒有 NL 但它有雙空格,我將它按那些分開。 最后,如果以上都不是,我想把它拆分成 3 個 26 個字符的塊。
對於上下文; 該列是客戶輸入到 3 行框中的數據。 從 4 個字符到 78 個字符。有些使用 NL,有些使用空格將文本推到下一行,有些幸運地使用空格,所以兩者都不用。
這是收集第一行的查詢部分:
CASE WHEN LENGTH(detail) < 27 THEN detail
WHEN detail LIKE E'%\n%' THEN SPLIT_PART(detail,E'\n',1)
WHEN detail LIKE E'% %' THEN SPLIT_PART(detail,E' ',1)
ELSE LEFT(detail, 26)
END AS line1,
當我在示例模式上對此進行測試時,前三個部分完全按照我的需要工作,但“ELSE”部分永遠不會。 LEFT 語句在 CASE 語句之外而不是在其內部。
我試過用 SELECT 子句將它括起來,嵌套幾個 CASE-WHEN-ELSE 語句,以及其他無濟於事的東西。
奇怪的是,如果我取出引用“% %”的“SPLIT_PART”行,它確實有效。
沒有放棄雙空格拆分,是否有其他解決方案,或者我只是格式化了錯誤?
CASE WHEN LENGTH(detail) < 27 THEN detail
WHEN detail LIKE '%\n%' THEN SPLIT_PART(detail,'\n',1)
WHEN position(' ' in detail) > 0 THEN SPLIT_PART(detail,' ',1)
ELSE left(detail,26)
又折騰了一會兒,我懷疑LIKE E'% %'
可能是問題所在——事實確實如此。 只需將它更改為LIKE E' '
就可以讓它像我想要的那樣工作。
補充:事實證明,最好的解決方案是結合“position”來確定是否存在雙倍空間,以及在該位置正確分離的 split-part。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.