Oracle Database 11g企业版11.2.0.4.0,PL / SQL版本11.2.0.4.0
我有一个表,其中包含一个地址列(NVARCHAR2(50))。该列应该仅是地址的第1行。
有一小部分记录,其中地址未正确输入到列中,这应该是地址的第一行,但似乎通过应用程序,用户可以多次输入地址的第一行,或者甚至是该地址列第一行中的完整地址。
扩展记录1(双击Toad中的列)将显示此内容。注意多余的行。
我需要编写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(例如,多行)。
答案 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)';