0

我需要一个允许我将描述列拆分为 4 列的 SQL 语句

描述包含以下内容,分隔符为“=”

Mary=123=456=payment

这需要分成以下几部分:

Claimant   Voucher _no   Rec_NO   descr  
Mary       123           456      payment
4

3 回答 3

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