문제

Oracle 9.2.0.6 데이터베이스에 테이블, 사용자가 있습니다. 필드 중 2 개는 varchar -last_name 및 first_name입니다.

행 이이 테이블에 삽입되면 이름과 성 필드는 모든 대문자에 있어야하지만이 두 필드의 일부 값은 혼합 된 케이스입니다.

나는 소문자 문자가있는 이름을 가진 테이블 또는 성이있는 테이블의 모든 행을 보여줄 쿼리를 실행하고 싶습니다.

나는 그물을 검색하고 regexp_like를 찾았지만 그것은 새로운 버전의 Oracle을위한 것이어야합니다. 그것은 나에게 효과가없는 것 같습니다.

내가 시도한 또 다른 것은 "abcde ... z"를 "$$$$$ ... $"로 번역 한 다음 내 분야에서 '$'를 검색하는 것이었지만 더 나은 방법이 있어야합니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

이건 어때:

select id, first, last from mytable
where first != upper(first) or last != upper(last);

다른 팁

이 시나리오에서는 BQ의 SQL과 Justin의 두 번째 SQL이 효과가 있다고 생각합니다.

first_name        last_name
----------        ---------
bob               johnson
Bob               Johnson
BOB               JOHNSON

쿼리가 처음 2 행을 반환하기를 원합니다.

나는 이것이 효율적인 쿼리가 될 것인지 확인하고 싶습니다. 내 테이블에는 5 억 행이 있습니다.

상단 (First_Name)! = First_name이라고 말할 때 "First_Name"은 항상 Oracle이보고있는 현재 행과 관련이 있습니까? 처음에는이 방법을 사용하는 것을 두려워했기 때문에이 테이블에 참여하게 될까봐 두려웠지만, 둘 다 SQL을 작성하는 방식으로 평등 점검이 줄 바운드 기준으로 만 작동하는 것으로 보입니다. 나를 위해 일할 것입니다.

Oracle 10G 이상을 찾고 있다면 아래 예제를 사용할 수 있습니다. 열의 문자가 소문자 인 행을 찾아야합니다.

Column1
.......
MISS
miss
MiSS

위의 예에서 값을 찾아야하는 경우 miss 그리고 MiSS, 그런 다음 아래 쿼리를 사용할 수 있습니다

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
 SELECT * 
 FROM mytable 
 WHERE FIRST_NAME IN (SELECT FIRST_NAME 
                      FROM MY_TABLE
                      MINUS 
                      SELECT UPPER(FIRST_NAME) 
                      FROM MY_TABLE )

이 시도:

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]','c'); => Miss, miss lower text
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[A-Z]','c'); => Miss, MISS upper text

DB Collation 설정이 CASE 민감도 인 SQL Server의 경우 다음을 사용합니다.

SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top