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


83

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

SELECT * FROM books WHERE title ILIKE "A%"

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

답변:


161

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

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;

1
op2를 시도 할 때 "데이터 유형 int에서 텍스트로의 명시 적 변환이 허용되지 않습니다."라는 메시지가 표시됩니다.
Gilad

1
옵션 2가 위의 주석에 언급 된 명시 적 변환 오류 (SQL Server 및 기타 프로그램에서 발생할 수 있음)를 반환하는 경우 최대 크기가 충분히 큰 VARCHAR을 사용해보십시오. SELECT * FROM books WHERE CAST (price AS VARCHAR (20)) LIKE '% 123 %'
bstrong

대단히 감사합니다! 5 페니를 추가 할 수 있습니다. 다음을 사용할 수도 있습니다. [...] CAST (price AS TEXT) ~ * '123 %'연산자 ~ *를 사용합니다. 또한 다음과 같은
정규 표현식을


6

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

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

2

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

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

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


2

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

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

2

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]+';

0

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

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

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

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


0

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]%$';

1
숫자 만 : 여기서 title ~ '^ [0-9] * $';
Charlie 木匠

PostgreSQL 9.5에서 SIMILAR TO가 "^"와 함께 작동하지 않는 것 같습니다. POSIX 정규식 "~"가 작동합니다.
Charlie 木匠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.