SQL Anywhere将“变量”子字符串解析为新列

时间:2015-09-28 18:04:35

标签: sql regex parsing sqlanywhere

我有一个由一个长字符串组成的数据库列。该字符串由许多由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?

提前致谢。

1 个答案:

答案 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