我需要一个允许我将描述列拆分为 4 列的 SQL 语句
描述包含以下内容,分隔符为“=”
Mary=123=456=payment
这需要分成以下几部分:
Claimant Voucher _no Rec_NO descr
Mary 123 456 payment
我需要一个允许我将描述列拆分为 4 列的 SQL 语句
描述包含以下内容,分隔符为“=”
Mary=123=456=payment
这需要分成以下几部分:
Claimant Voucher _no Rec_NO descr
Mary 123 456 payment
许多 RDBMS 以原生方式或通过扩展为您提供正则表达式函数。由于我来自 PostgresSQL 世界并且您没有指定您正在使用的 RDBMS,那么我将举例说明如何在 PostgreSQL 中执行此操作。
您可以为此目的使用regexp_split_to_table()函数:
SELECT entry
FROM regexp_split_to_table('Mary=123=456=payment', '=') AS t(entry);
您可以检查SQL Fiddle上的输出。
SQL 语言不用于计算目的。使用更高级别(编程语言,ORM)以获得更快的速度。您的 RDBMS 应该支持子查询、字符串函数(SUBSTRING、LOCATE)。MySQL中的以下代码
http://www.sqlfiddle.com/#!2/ec808/26
CREATE TABLE Table1(
data varchar(2000)
)
INSERT INTO Table1(data) values('Mary=123=456=payment');
INSERT INTO Table1(data) values('Mary232=123=456=payment');
SELECT SUBSTRING(data, 1,pos1-1) as Claimant ,
SUBSTRING(data, pos1+1,pos2-pos1-1) as Voucher_no,
SUBSTRING(data, pos2+1,pos3-pos2-1) as Rec_NO,
SUBSTRING(data, pos3+1) as descr FROM (
SELECT
data,
LOCATE('=',`data`) as pos1,
LOCATE('=',`data`,LOCATE('=',`data`)+1) as pos2,
LOCATE('=',`data`,LOCATE('=',`data`,LOCATE('=',`data`)+1)+1) as pos3
FROM table1) as subq;
在 Oracle 上,您必须使用
select substr(description, 1, instr(description, '=') - 1) part1,
substr(description, instr(description, '=') + 1,
instr(description, '=', 1, 2) - instr(description, '=') - 1) part2,
substr(description, instr(description, '=', 1, 2) + 1,
instr(description, '=', 1, 3) - instr(description, '=', 1, 2) - 1) part3,
substr(description, instr(description, '=', 1, 3) + 1) part4
from your_table;
MySQL 有类似的结构。