- 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
'DataBase' 카테고리의 다른 글
참조하는 테이블에서 하위 항목이 몇 건인지 출력하는 법 (0) | 2022.04.17 |
---|---|
가장 최근에 insert한 row의 pk 값 받아오기 (테이블을 참조해야 할 때) (0) | 2022.04.13 |
mySQL 에서 insert into 구문 한 번에 여러 줄 추가하기 (0) | 2022.04.02 |
1:N 관계 / M:N 관계, 식별 관계 / 비식별 관계 - 개념과 예시 (0) | 2022.03.27 |
상세 항목들의 합계를 구해 놓는 칼럼을 따로 두는 게 나을까? (0) | 2022.03.27 |