1
SELECT 1 FROM dual where trim('X ') = 'X'

1 を与えます。

SELECT 1 FROM dual where trim(' ') = ''

行を与えません。

field空白が正規表現に達していないすべての行を選択する簡単な方法はありますか?

TRIM を「だまして」 TRIMming' 'して与える方法はあり''ますか?

4

1 に答える 1

6

Oracle では、空の文字列は NULLです。したがって、従来のアプローチは次のようなものになります

SELECT 1 
  FROM dual 
 WHERE trim(' ') IS NULL

もちろん、列が である結果も返されますNULL。列が非 NULL で、スペースだけで構成されている場合が必要な場合

SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2    select 1 id, ' ' str from dual union all
  3    select 2, null from dual union all
  4    select 3, 'a' from dual
  5  )
  6  select *
  7    from t
  8   where trim(str) is null
  9*    and str is not null
SQL> /

        ID S
---------- -
         1

regexp_likeシンプルなものも使いたい場合は、答えを締めくくるだけです

SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2    select 1 id, ' ' str from dual union all
  3    select 2, null from dual union all
  4    select 3, 'a ' from dual
  5  )
  6  select *
  7    from t
  8*  where regexp_like( str, '^[[:space:]]+$' )
SQL> /

        ID ST
---------- --
         1
于 2012-06-20T13:36:04.940 に答える