Oracle - 필드에 소문자가 있는 위치를 선택합니다.
Oracle 9.2.0.6 데이터베이스에 사용자 테이블이 있습니다.필드 중 두 개는 varchar(last_name 및 first_name)입니다.
행을 이 테이블에 삽입할 때 이름과 성 필드는 모두 대문자여야 하지만, 이 두 필드의 일부 값은 대소문자가 혼합되어 있습니다.
테이블에 소문자가 있는 이름 또는 성이 있는 모든 행을 표시하는 쿼리를 실행하려고 합니다.
인터넷을 검색해보니 REGEXP_LIKE가 나왔는데, 그것은 새로운 버전의 오라클용임에 틀림없습니다. 저에게는 안 맞는 것 같습니다.
제가 시도한 또 다른 것은 "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
나는 내 쿼리가 처음 두 행을 반환하기를 원합니다.
하지만 저는 이것이 효율적인 질의가 될 것인지 확인하고 싶습니다. 제 테이블에는 5억 개의 행이 있습니다.
opper(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 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
SELECT *
FROM mytable
WHERE FIRST_NAME IN (SELECT FIRST_NAME
FROM MY_TABLE
MINUS
SELECT UPPER(FIRST_NAME)
FROM MY_TABLE )
DB colation 설정이 대소문자를 구분하지 않는 SQL 서버의 경우 다음을 사용합니다.
SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
언급URL : https://stackoverflow.com/questions/317576/oracle-select-where-field-has-lowercase-characters
'programing' 카테고리의 다른 글
다른 위치에 있는 디렉토리에서 특정 Laravel 5 경로에 액세스 (0) | 2023.06.27 |
---|---|
R의 데이터 열 표준화 (0) | 2023.06.27 |
반환된 열의 이름을 Pandas Aggregate 함수에 지정하시겠습니까? (0) | 2023.06.27 |
실행 총계 / 실행 잔액 계산 (0) | 2023.06.27 |
명시적으로 파일을 닫는 것이 중요합니까? (0) | 2023.06.27 |