非常に大きな Oracle テーブルで問題のあるレコードを見つけようとしています。varchar2 列であっても、列にはすべて数値データが含まれている必要があります。数値データを含まないレコードを見つける必要があります (この列で to_number(col_name) 関数を呼び出そうとすると、エラーがスローされます)。
119521 次
11 に答える
27
regexp_like条件を使用し、正規表現を使用して非数値を検索できると考えていました。これがお役に立てば幸いです。
SELECT * FROM table_with_column_to_search WHERE REGEXP_LIKE(varchar_col_with_non_numerics, '[^0-9]+');
于 2011-10-31T17:50:22.707 に答える
1
http://www.dba-oracle.com/t_isnumeric.htmから
LENGTH(TRIM(TRANSLATE(, ' +-.0123456789', ' '))) is null
TRIM の後に文字列に何かが残っている場合は、数字以外の文字でなければなりません。
于 2016-09-29T08:34:51.487 に答える
0
私はこれが便利だと思いました:
select translate('your string','_0123456789','_') from dual
結果が NULL の場合、数値です (浮動小数点数は無視されます)。
ただし、アンダースコアが必要な理由に少し困惑しています。それがなければ、次も null を返します。
select translate('s123','0123456789', '') from dual
私のお気に入りのトリックの 1 つもあります。文字列に "*" や "#" などのものが含まれている場合は完全ではありません。
SELECT 'is a number' FROM dual WHERE UPPER('123') = LOWER('123')
于 2012-06-12T19:55:30.777 に答える
0
SELECT
D.UNIT_CODE,
D.CUATM,
D.CAPITOL,
D.RIND,
D.COL1 AS COL1
FROM
VW_DATA_ALL_GC D
WHERE
(D.PERIOADA IN (:pPERIOADA)) AND
(D.FORM = 62)
AND D.COL1 IS NOT NULL
-- AND REGEXP_LIKE (D.COL1, '\[\[:alpha:\]\]')
-- AND REGEXP_LIKE(D.COL1, '\[\[:digit:\]\]')
--AND REGEXP_LIKE(TO_CHAR(D.COL1), '\[^0-9\]+')
GROUP BY
D.UNIT_CODE,
D.CUATM,
D.CAPITOL,
D.RIND ,
D.COL1
ORDER BY
D.COL1
于 2021-02-02T14:51:06.373 に答える