説明列を 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
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;
多くの RDBMS は、ネイティブまたは拡張機能を介して、正規表現関数を提供します。私はPostgresSQLの世界から来て、使用しているRDBMSを指定していないので、PostgreSQLでそれを行う方法の例を示します.
この目的のためにregexp_split_to_table()関数を使用できます。
SELECT entry
FROM regexp_split_to_table('Mary=123=456=payment', '=') AS t(entry);
SQL Fiddleで出力を確認できます。
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 にも同様の構造があります。