SQL Server에서는 특정 문자열의 존재 여부를 확인하기 위해 CHARINDEX 또는 PATINDEX를 사용한다. 이를 활용해 문자열이 존재하면 1(True), 존재하지 않으면 0(False)으로 반환하도록 처리할 수 있다.
SELECT
CASE
WHEN CHARINDEX('abc', column_name) > 0 THEN 1
ELSE 0
END AS IsMatch
FROM table_name;
CHARINDEX('abc', column_name) > 0: 문자열 'abc'가 열(column_name)에 존재하면 위치값(1 이상의 값)을 반환. 존재하지 않으면 0을 반환.CASE를 사용해 1(True) 또는 0(False)으로 변환.SELECT
CASE
WHEN PATINDEX('%abc%', column_name) > 0 THEN 1
ELSE 0
END AS IsMatch
FROM table_name;
PATINDEX('%abc%', column_name): 와일드카드(%)를 포함한 패턴 매칭이 가능.'abc'가 포함된 경우 위치값 반환, 없으면 0 반환.SELECT
IIF(CHARINDEX('abc', column_name) > 0, 1, 0) AS IsMatch
FROM table_name;
IIF를 사용하면 조건문을 간결하게 작성 가능.SELECT
CAST(CASE WHEN CHARINDEX('abc', column_name) > 0 THEN 1 ELSE 0 END AS BIT) AS IsMatch
FROM table_name;
CAST(... AS BIT)를 사용해 결과를 Boolean 형식처럼 처리.이외에도 , 그냥 특정 문자열 찾아서 True False에 따라 WHERE 조건 걸라면 LIKE 쓰면 편하다.
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') AS FREEZER_YN FROM FOOD_WAREHOUSE WHERE WAREHOUSE_NAME LIKE '%경기%';
Oracle에서는 정규표현식을 기본적으로 지원하며, REGEXP_LIKE를 사용해 특정 문자열의 존재 여부를 확인할 수 있다.
SELECT
CASE
WHEN REGEXP_LIKE(column_name, 'abc') THEN 1
ELSE 0
END AS IsMatch
FROM table_name;
REGEXP_LIKE(column_name, 'abc'): 정규표현식으로 'abc'를 포함하는지 확인.CASE로 1(True) 또는 0(False) 반환.Oracle은 Boolean 자료형을 직접 지원하지 않지만, 아래와 같이 처리 가능:
SELECT
CASE
WHEN REGEXP_LIKE(column_name, 'abc') THEN 1
ELSE 0
END AS IsMatch
FROM table_name;
SQL Server에서는 특정 문자열의 위치를 찾기 위해 CHARINDEX 또는 PATINDEX를 사용한다.
SELECT CHARINDEX('abc', column_name) AS MatchPosition
FROM table_name;
CHARINDEX('abc', column_name): 문자열 'abc'의 시작 위치를 반환. 없으면 0을 반환.SELECT PATINDEX('%abc%', column_name) AS MatchPosition
FROM table_name;
PATINDEX('%abc%', column_name): 와일드카드를 포함한 패턴 매칭의 시작 위치를 반환. 없으면 0을 반환.Oracle에서는 문자열 위치를 찾기 위해 INSTR 또는 정규표현식을 사용할 수 있다.
SELECT INSTR(column_name, 'abc') AS MatchPosition
FROM table_name;
INSTR(column_name, 'abc'): 문자열 'abc'의 시작 위치를 반환. 없으면 0 반환.SELECT REGEXP_INSTR(column_name, 'abc') AS MatchPosition
FROM table_name;
REGEXP_INSTR(column_name, 'abc'): 정규표현식 기반으로 문자열 'abc'의 시작 위치를 반환. 없으면 0 반환.SQL Server에서는 ISNULL(칼럼, 대체)
이렇게 쓸 수 있지만
다른 DBMS에서도 사용하려면
COALESCE(칼럼, 대체) 로 쓰는 것이 좋다.
| 기능 | SQL Server | Oracle |
|---|---|---|
| 문자열 존재 여부 확인 | CHARINDEX, PATINDEX | REGEXP_LIKE |
| 문자열 위치 찾기 | CHARINDEX, PATINDEX | INSTR, REGEXP_INSTR |
| Boolean 반환 | CAST(... AS BIT) 또는 CASE로 처리 | CASE와 정규표현식을 조합하여 구현 |
SQL Server는 간단한 패턴 매칭에 적합한 PATINDEX, Oracle은 정규표현식 기반의 유연한 문자열 처리가 가능하다. 두 DB의 장단점을 이해하고 적절한 함수를 활용하면 효율적으로 문자열을 처리할 수 있다.
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N')
FROM FOOD_WAREHOUSE
WHERE REGEXP_LIKE(WAREHOUSE_NAME, '경기');
SELECT WAREHOUSE_ID,
WAREHOUSE_NAME,
ADDRESS,
COALESCE(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE WAREHOUSE_NAME LIKE '%경기%';