0

説明列を 4 列に分割できる SQL ステートメントが必要です

説明は、「=」の区切り文字で次を保持します

Mary=123=456=payment

これは、次のように分割する必要があります。

Claimant   Voucher _no   Rec_NO   descr  
Mary       123           456      payment
4

3 に答える 3

2

SQL言語は計算目的ではありません。より高速にするために、より高いレベル(プログラミング言語、ORM)を使用してください。RDBMSは、サブクエリ、文字列関数(SUBSTRINGLOCATE)をサポートする必要があります。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;
于 2012-05-16T05:37:38.700 に答える
2

多くの RDBMS は、ネイティブまたは拡張機能を介して、正規表現関数を提供します。私はPostgresSQLの世界から来て、使用しているRDBMSを指定していないので、PostgreSQLでそれを行う方法の例を示します.

この目的のためにregexp_split_to_table()関数を使用できます。

SELECT entry
  FROM regexp_split_to_table('Mary=123=456=payment', '=') AS t(entry);

SQL Fiddleで出力を確認できます。

于 2012-05-16T05:59:02.743 に答える
0

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 にも同様の構造があります。

于 2012-05-16T05:59:16.927 に答える