我會考慮這兩種解決方案是反模式,並建議檢測其性能。
第一種方法使用了flex表包中的函數。
SELECT values::INT as var1
FROM (
SELECT MapItems(v1) OVER() AS (keys, values)
FROM (
SELECT MapDelimitedExtractor('1234, 2345, 3456, 4567'
USING PARAMETERS DELIMITER=',') AS v1
) AS T
) AS T2
WHERE REGEXP_SUBSTR(values,'\d+',1) IS NOT NULL;
var1
------
1234
2345
3456
4567
(4 rows)
第二種方法使用來自文本索引包中的函數。
SELECT words::INT AS var1
FROM (
SELECT TxtIndex.StringTokenizerDelim('1234, 2345, 3456, 4567',',')
OVER() AS (words, input_string)
) AS T
WHERE REGEXP_SUBSTR(words, '\d+',1) IS NOT NULL;
var1
------
1234
2345
3456
4567
(4 rows)
你有沒有對數據庫的結構控制?列中以逗號分隔的整數列表強烈暗示您的數據庫結構是錯誤的。 –
@MattGibson我認爲實際問題是他作爲參數傳遞給查詢(逗號分隔數字的varchar列表),而不是數據庫結構。 –
@RaduGheorghiu在一列中存儲多個值是一個結構問題。 – Kermit