본문 바로가기

DataBase

sql 특정 문자열을 포함하는지 확인하는 함수 contains (mySQL, Oracle)


- JAVA에서 특정 문자열을 포함하는지 확인하기 - 

Java 에서 문자열을 포함하는지 여부를 확인하는 함수는 아래와 같다.
string.contains("str"); 

//자바 코드 예시
String myStr = "Hello";
boolean isContain = myStr.contains("ell");
System.out.println(isContain);   // true

 

sql 로 자바의 contains 같은 기능을 수행하려면 어떻게 해야 할까?


 

- SQL에서 특정 문자열을 포함하는지 확인하기 - 

database에서도 sql 쿼리를 날릴 때
어떤 문자열을 포함하는지 여부를 
확인해야 할 때가 많다.

데이터를 불러올 때 모두 다 불러오는 것이 아니라
어떤 조건을 만족하는 데이터만 불러오고 싶을 때,
그 조건으로 특정한 단어나 문자열을 포함하는지 여부를 설정할 수 있다.

이런 경우 '%'를 사용하면 된다.
특정 문자열을 가운데에 두고 앞뒤에 '%'로 감싼다.
여기서 '%' 는 '와일드 카드'인데,
어떤 문자열이든 상관 없다는 뜻이다.
'%(와일드 카드)' 가 앞에 붙으면 해당 문자열 앞으로 어떤 문자열이 오든 상관 없다는 뜻이고,

'%(와일드 카드)'가 뒤에 붙으면 해당 문자열 앞으로 어떤 문자열이 오든 상관 없다는 뜻이다.

특정한 문자열의 앞뒤로 '%(와일드 카드)'를 붙이면

해당 문자열을 가운데에 두고 앞뒤로 어떤 문자열이 오든 상관 없다는 뜻이다.

즉, 그 문자열을 포함하는 모든 문자열을 의미하게 된다.


SQL문으로 표현한다면 아래와 같다.

SELECT * FROM tb_product WHERE product_name LIKE CONCAT('%','a','%');


위 쿼리 문법은 MySQL이든 Oracle이든 똑같다. 


 

 

- 와일드 카드 SQL을 쓸 때 주의할 점 -

여기서 주의할 점은 두 가지다.

SELECT * FROM tb_product WHERE product_name LIKE CONCAT('%','a','%');


하나는 비교 연산자를 '='가 아니라 like 를 썼다는 점이다.
문자열 = '%' 처럼 쓰면 와일드 카드가 작동하지 않는다.

SELECT * FROM tb_product WHERE product_name = CONCAT('%','a','%'); -- doesn't work



둘째는 문자열들을 이어붙일 때 concat 함수를 사용했다는 점이다.
문자열끼리 이어붙이는 연산자인 '||' 를 쓰면 잘 작동하지 않는다.

SELECT * FROM tb_product WHERE product_name LIKE '%' || 'a' || '%'; --doesn't work

 

-220404

반응형