Programing

정수를 확인하는 SQL LIKE 조건?

lottogame 2020. 11. 30. 07:40
반응형

정수를 확인하는 SQL LIKE 조건?


저는 SQL LIKE 조건 세트를 사용하여 알파벳을 살펴보고 적절한 문자로 시작하는 모든 항목을 나열합니다. 예를 들어 제목이 "A"로 시작하는 모든 책을 가져옵니다.

SELECT * FROM books WHERE title ILIKE "A%"

문자는 괜찮지 만 숫자로 시작하는 모든 항목을 나열하려면 어떻게해야합니까? 이것이 가치있는 것은 Postgres DB에 있습니다.


그러면 제목이 숫자로 시작하는 모든 책이 (정규식에 의해) 선택됩니다.

SELECT * FROM books WHERE title ~ '^[0-9]'

특정 숫자로 시작하는 정수를 원한다면 다음을 사용할 수 있습니다.

SELECT * FROM books WHERE CAST(price AS TEXT) LIKE '123%'

또는 사용하십시오 (모든 숫자가 동일한 자릿수 인 경우 (제약 조건이 유용 할 것입니다))

SELECT * FROM books WHERE price BETWEEN 123000 AND 123999;

PostgreSQL은 지원하는 정규 표현식 매칭을 .

따라서 귀하의 예는 다음과 같습니다.

SELECT * FROM books WHERE title ~ '^\d+ ?' 

하나 이상의 숫자 및 선택적 공백으로 시작하는 제목과 일치합니다.


문자열로 검색하려면 다음과 같은 텍스트로 변환 할 수 있습니다.

SELECT * FROM books WHERE price::TEXT LIKE '123%'

"7로 시작하는 문자열"이 아닌 "7로 시작하는 숫자"를 찾는다고 가정하면

select * from books where convert(char(32), book_id) like '7%'

또는 변환에 해당하는 Postgres가 무엇이든간에.


나는 여기 파티에 늦었지만 고정 길이의 정수를 다루는 경우 정수 비교를 할 수 있습니다.

SELECT * FROM books WHERE price > 89999 AND price < 90100;

PostgreSQL 9.5에서 테스트 :

-숫자 만

select * from books where title ~ '^[0-9]*$';

또는,

select * from books where title SIMILAR TO '[0-9]*';

-숫자로 시작

select * from books where title ~ '^[0-9]+';

그중 어느 것이 색인 생성이 가능합니까?

이것은 확실히 btree-indexable입니다.

WHERE title >= '0' AND title < ':'

ASCII에서 ':'는 '9'뒤에옵니다.


PostreSQL에서는 SIMILAR TO 연산자 ( more )를 사용할 수 있습니다 .

-- only digits
select * from books where title similar to '^[0-9]*$';
-- start with digit
select * from books where title similar to '^[0-9]%$';

참고 URL : https://stackoverflow.com/questions/1684291/sql-like-condition-to-check-for-integer

반응형