SQL 任意位置将 'varying' 个子字符串解析为新列

SQL Anywhere Parse 'varying' substring(s) into new columns

我有一个由一个长字符串组成的数据库列。该字符串由许多由 CHAR(13) 分隔的子字符串组成。我的问题是子字符串的长度不同。 我的目标是解析出每个子字符串(每个 CHAR(13) 之间的部分)并将这个子字符串放入它自己的列中。

子字符串 'standardized' 一个例子:

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?

提前致谢。

对于特定列:

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