如何识别变量是否包含 Oracle 中的换行符
How to recognize if a variable contains a newline character in Oracle
我有一个程序将 2 个变量作为输入,其中一个变量可能包含由 enter 或 space 分隔的字符串字符。
Space 然而很容易弄清楚,但是我们如何弄清楚变量中是否有换行符。
我试过使用 chr(10)
但没有用,因为我必须识别字符串是否由换行符分隔。顺便说一下,即使 chr(10)
也无法插入以 space 分隔的字符串。
select 'ABC' || chr(10) || 'DEF' as c from dual
我目前没有输入这样的变量,所以甚至无法尝试缩小到某些解决方案,而且上面的查询也不 运行 好,我的意思是它没有给出如下所示的输出。
ABC
DEF
我也搜索过不同的 oracle 文档,但没有找到。
不胜感激。
create table sample (a varchar2(100));
insert into sample (a) values ('HI_next_line
hello_next_line
hello2');
insert into sample (a) values ('singleline1');
insert into sample (a) values ('singleline2');
SQL> select * from sample;
A
-----------------------------------------------------------------------
HI_next_line
hello_next_line
hello2
singleline1
singleline2
SQL> select *
2 from sample
3 where instr(a, chr(10)) > 0;
A
-----------------------------------------------------------------------
HI_next_line
hello_next_line
hello2
一个换行取决于操作系统。在基于Unix的OS中是CHR(10)
,在Windows中是CHR(13)
接着是 CHR(10)
.
您可以使用以下任一方式:
LIKE '%'||chr(10)||'%'
INSTR(column_name, chr(10)) > 0
让我们看看Windows中的测试用例 OS:
SQL
使用 LIKE
SQL> WITH DATA AS(
2 SELECT 'ABC' || chr(10) || 'DEF' AS c FROM dual UNION ALL
3 SELECT 'PQR' || ' ' || 'XYZ' AS c FROM dual UNION ALL
4 SELECT 'QWE' || CHR(13) || 'RTY' AS c FROM dual UNION ALL
5 SELECT 'no_space' AS c FROM dual
6 )
7 SELECT * FROM DATA WHERE c LIKE '%'||chr(10)||'%';
C
--------
ABC
DEF
SQL>
使用 INSTR
SQL> WITH DATA AS(
2 SELECT 'ABC' || chr(10) || 'DEF' AS c FROM dual UNION ALL
3 SELECT 'PQR' || ' ' || 'XYZ' AS c FROM dual UNION ALL
4 SELECT 'QWE' || CHR(13) || 'RTY' AS c FROM dual UNION ALL
5 SELECT 'no_space' AS c FROM dual
6 )
7 SELECT * FROM DATA WHERE INSTR(c, chr(10)) > 0;
C
--------
ABC
DEF
SQL>
PL/SQL
使用 LIKE
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 c VARCHAR2(100);
3 BEGIN
4 c:='ABC' || chr(10) || 'DEF';
5 IF c LIKE '%'||chr(10)||'%' THEN
6 dbms_output.put_line('found chr(10)');
7 ELSE
8 dbms_output.put_line('not found');
9 END IF;
10 END;
11 /
found chr(10)
PL/SQL procedure successfully completed.
SQL>
使用 INSTR
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 c VARCHAR2(100);
3 BEGIN
4 c:='ABC' || chr(10) || 'DEF';
5 IF INSTR(c, chr(10)) > 0 THEN
6 dbms_output.put_line('found chr(10)');
7 ELSE
8 dbms_output.put_line('not found');
9 END IF;
10 END;
11 /
found chr(10)
PL/SQL procedure successfully completed.
SQL>
我有一个程序将 2 个变量作为输入,其中一个变量可能包含由 enter 或 space 分隔的字符串字符。
Space 然而很容易弄清楚,但是我们如何弄清楚变量中是否有换行符。
我试过使用 chr(10)
但没有用,因为我必须识别字符串是否由换行符分隔。顺便说一下,即使 chr(10)
也无法插入以 space 分隔的字符串。
select 'ABC' || chr(10) || 'DEF' as c from dual
我目前没有输入这样的变量,所以甚至无法尝试缩小到某些解决方案,而且上面的查询也不 运行 好,我的意思是它没有给出如下所示的输出。
ABC
DEF
我也搜索过不同的 oracle 文档,但没有找到。
不胜感激。
create table sample (a varchar2(100));
insert into sample (a) values ('HI_next_line
hello_next_line
hello2');
insert into sample (a) values ('singleline1');
insert into sample (a) values ('singleline2');
SQL> select * from sample;
A
-----------------------------------------------------------------------
HI_next_line
hello_next_line
hello2
singleline1
singleline2
SQL> select *
2 from sample
3 where instr(a, chr(10)) > 0;
A
-----------------------------------------------------------------------
HI_next_line
hello_next_line
hello2
一个换行取决于操作系统。在基于Unix的OS中是CHR(10)
,在Windows中是CHR(13)
接着是 CHR(10)
.
您可以使用以下任一方式:
LIKE '%'||chr(10)||'%'
INSTR(column_name, chr(10)) > 0
让我们看看Windows中的测试用例 OS:
SQL
使用 LIKE
SQL> WITH DATA AS(
2 SELECT 'ABC' || chr(10) || 'DEF' AS c FROM dual UNION ALL
3 SELECT 'PQR' || ' ' || 'XYZ' AS c FROM dual UNION ALL
4 SELECT 'QWE' || CHR(13) || 'RTY' AS c FROM dual UNION ALL
5 SELECT 'no_space' AS c FROM dual
6 )
7 SELECT * FROM DATA WHERE c LIKE '%'||chr(10)||'%';
C
--------
ABC
DEF
SQL>
使用 INSTR
SQL> WITH DATA AS(
2 SELECT 'ABC' || chr(10) || 'DEF' AS c FROM dual UNION ALL
3 SELECT 'PQR' || ' ' || 'XYZ' AS c FROM dual UNION ALL
4 SELECT 'QWE' || CHR(13) || 'RTY' AS c FROM dual UNION ALL
5 SELECT 'no_space' AS c FROM dual
6 )
7 SELECT * FROM DATA WHERE INSTR(c, chr(10)) > 0;
C
--------
ABC
DEF
SQL>
PL/SQL
使用 LIKE
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 c VARCHAR2(100);
3 BEGIN
4 c:='ABC' || chr(10) || 'DEF';
5 IF c LIKE '%'||chr(10)||'%' THEN
6 dbms_output.put_line('found chr(10)');
7 ELSE
8 dbms_output.put_line('not found');
9 END IF;
10 END;
11 /
found chr(10)
PL/SQL procedure successfully completed.
SQL>
使用 INSTR
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 c VARCHAR2(100);
3 BEGIN
4 c:='ABC' || chr(10) || 'DEF';
5 IF INSTR(c, chr(10)) > 0 THEN
6 dbms_output.put_line('found chr(10)');
7 ELSE
8 dbms_output.put_line('not found');
9 END IF;
10 END;
11 /
found chr(10)
PL/SQL procedure successfully completed.
SQL>