我有一个由一个长字符串组成的数据库列。该字符串由许多由CHAR(13)分隔的子字符串组成。我的问题是子字符串的长度不同。 我的目标是解析每个子字符串(每个CHAR(13)之间的部分)并将此子字符串放入它自己的列中。
子字符串是“标准化”的一个例子:
Voltage (VAC)=%CHAR(13)
Rating (A)=%CHAR(13)
Input Rating (A)=%CHAR(13)
- (%)长度不同。并且第一行不以CHAR(13)开头。
我想我必须使用类似的解决办法,但我不确定如何实施。 Why we can't execute stored procedure in select statement in oracle? is there any strong reason?
提前致谢。
答案 0 :(得分:0)
对于特定列:
SELECT
SUBSTR(REGEX_SUBSTR(col1, 'Voltage \(VAC\)=[^\r]*'), 15) AS Voltage,
SUBSTR(REGEX_SUBSTR(col1, 'Rating \(A\)=[^\r]*'), 12) AS Rating,
SUBSTR(REGEX_SUBSTR(col1, 'Input Rating \(A\)=[^\r]*'), 18) AS Input_Rating
FROM mytable
对于通用列:
SELECT
REGEX_SUBSTR(REGEX_SUBSTR(col1, '[^=\r]+=[^\r]*', 1, row_num), '^[^=]*') AS Name,
SUBSTR(REGEX_SUBSTR(REGEX_SUBSTR(col1, '[^=\r]+=[^\r]*', 1, row_num), '=.*'), 2) AS Value
FROM mytable, sa_rowgenerator(1, 100)
WHERE REGEX_SUBSTR(col1, '[^=\r]+=[^\r]*', 1, row_num) IS NOT NULL