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