标识多行输入数据的列

时间:2019-03-01 13:09:36

标签: sql oracle

Oracle Database 11g企业版11.2.0.4.0,PL / SQL版本11.2.0.4.0

我有一个表,其中包含一个地址列(NVARCHAR2(50))。该列应该仅是地址的第1行。

有一小部分记录,其中地址未正确输入到列中,这应该是地址的第一行,但似乎通过应用程序,用户可以多次输入地址的第一行,或者甚至是该地址列第一行中的完整地址。

Screenshot1

扩展记录1(双击Toad中的列)将显示此内容。注意多余的行。

screenshot 2

我需要编写SQL来识别包含以这种错误格式输入的地址的第一行的列(例如,多行或制表符等) 我在另一个堆栈交换帖子上发现了这个问题,但这对我的多行情况没有帮助。

从表名中选择*,其中regexp_like(列名,chr(9));

我写了这个SQL来复制,它似乎演示了我的情况。

CREATE TABLE XRAY_TEST (ADD_LI1 NVARCHAR2(50));

INSERT INTO XRAY_TEST (ADD_LI1)
VALUES ('25 CAMBRIDGE STREET
25 CAMBRIDGE STREET
25 CA');
COMMIT;

INSERT INTO XRAY_TEST (ADD_LI1)
VALUES ('25 WESTWIND CRESCENT');
COMMIT;

SELECT *
FROM XRAY_TEST

因此,总而言之,我希望能够识别表中已输入的任何记录,例如record1(例如,多行)。

2 个答案:

答案 0 :(得分:1)

似乎您正在寻找包含换行符的值,所以:

where somecol like '%'||chr(10)||'%'

或者,

where instr(somecol, chr(10)) > 0

这里的正则表达式可能会导致过度杀伤。

答案 1 :(得分:0)

尝试匹配新行的正则表达式,此查询将仅生成地址分布在1行以上的那些记录

SELECT * 
FROM XRAY_TEST 
where ADD_LI1 regexp '(\n)';