web-dev-qa-db-ja.com

文字列値にキャリッジリターンが含まれているかどうかをテストするSQLクエリ

VARCHAR列の値がキャリッジリターンで終わるかどうかをテストする正しい方法を見つけようとしています。これを試しましたが、機能しません。データベースはOracle 11g.。

select name from myTable where name LIKE '%\r' OR name like '%\n'
8
raffian

キャリッジリターン、垂直タブ、行末などの印刷できない文字を含む値を見つけるには、 regexp_like 関数を使用できます。特定の列の文字列値の最後にキャリッジリターンが含まれている行を表示する場合は、同様のクエリを使用できます。

select *
  from your_table_name
 where regexp_like(trim(string_column), '[[:space:]]$')

デモ


コメントへの回答

Trim関数は、デフォルトで、先頭と末尾のスペースを削除し、キャリッジリターンまたはを削除しません。 )行末文字。簡単なテストを実行してみましょう:

SQL> create table Test_Table(
  2    id number,
  3    col1 varchar2(101)
  4  );

Table created

SQL> insert into Test_Table (id, col1)
  2    values(1, 'Simple string');

1 row inserted

SQL> commit;

Commit complete

SQL> insert into Test_Table (id, col1)
  2    values(1, 'Simple string with carriage return at the end' || chr(13));

1 row inserted

SQL> commit;

Commit complete

SQL> insert into Test_Table (id, col1)
  2    values(1, '   Simple string with carriage return at the end leading and trailing spaces' || chr(13)||'   ');

1 row inserted

SQL> commit;

Commit complete

SQL> insert into Test_Table (id, col1)
  2    values(1, '  Simple string leading and trailing spaces  ');

1 row inserted

SQL> commit;

Commit complete

SQL> select *
  2    from test_table;

        ID COL1
--------------------------------------------------------------------------------
         1 Simple string
         1 Simple string with carriage return at the end
         1    Simple string with carriage return at the end leading and trailing spaces
         1   Simple string leading and trailing spaces

SQL> 
SQL> select *
  2    from test_table
  3   where regexp_like(trim(col1), '[[:space:]]$')
  4  ;

        ID COL1
----------------------------------------------------------------------------------
         1 Simple string with carriage return at the end
         1    Simple string with carriage return at the end leading and trailing spaces

SQL> 
5
Nick Krasnov

試してみてください

SELECT name from myTable where name like '%'||chr(10) or name like '%'||chr(13)
11
A.B.Cade