마지막으로 제 동료의 도움을 받아 실현 가능한 해결책을 찾았습니다. 그것은 약간의 제한이 있습니다 (부호는 고려되지 않습니다. 소수 부분은 고려되지 않습니다). 그러나 ID에 대해서는 잘 작동합니다. 모두 시작과 문자열의 끝에서
- 트림 공간 문자열에서
- 트림 선행 제로
이 네 개의 문자 (에 제로와 최대 허용 길이
- 패드 문자열
- 테스트 문자열의 시작 부분에 네 개의 0을 추가하고 문자열에서 4 자)
- 테스트
그래서 기록을 0에서 허용되는 문자 세트에 문자열의 각 위치에 마지막으로 도착 DECIMAL(4)
로 변환 할 수 없습니다 1,233,994,는 선택 방법 :
이
select
Some_Id
from
SRC_TABLE
where
characters(trim(leading '0' from trim(both ' ' from Some_Id))) > 4
or substring(substring('0000' || trim(leading '0' from trim(both ' ' from Some_Id)) FROM characters('0000' || trim(leading '0' from trim(both ' ' from Some_Id))) - 3) FROM 1 FOR 1) NOT IN ('0','1','2','3','4','5','6','7','8','9')
or substring(substring('0000' || trim(leading '0' from trim(both ' ' from Some_Id)) FROM characters('0000' || trim(leading '0' from trim(both ' ' from Some_Id))) - 3) FROM 2 FOR 1) NOT IN ('0','1','2','3','4','5','6','7','8','9')
or substring(substring('0000' || trim(leading '0' from trim(both ' ' from Some_Id)) FROM characters('0000' || trim(leading '0' from trim(both ' ' from Some_Id))) - 3) FROM 3 FOR 1) NOT IN ('0','1','2','3','4','5','6','7','8','9')
or substring(substring('0000' || trim(leading '0' from trim(both ' ' from Some_Id)) FROM characters('0000' || trim(leading '0' from trim(both ' ' from Some_Id))) - 3) FROM 4 FOR 1) NOT IN ('0','1','2','3','4','5','6','7','8','9');
솔루션을 제안 할 때 잘 수행됩니다. 음수와 소수점이있는 숫자는이 메소드를 사용하여 유효하지 않은 것으로 간주되기 때문에 특정 케이스에서 작동하지만 올바른 숫자 파서와 동일하지는 않습니다. – lins314159