안녕하세요~~ 아래와 같은 쿼리가 있는데요...

좀 더 괜찮은 방법이 있을 것 같은데.. 고수님들 좀 봐주세요 ^^ 감사.... ^^

설명 : 공백으로 구분된 문장 형태의 값을 공백 기준으로 자릅니다. 잘라진 각각의 단어가

KEYWORD_INFO 테이블의 [KEYWORD like "단어 + '%'"] 조건으로 쿼리되면 됩니다.

아래 쿼리는 공백 기준으로 자른 단어 수만큼의 비교 조건이 where에 붙어야 하는데

다른 방법이 없을까요? 단어가 몇개가 될지도 모르는 것이고...

쿼리는 "우리 야구" 라고 입력받아서 각각의 단어인 "우리"와 "야구" 로 시작하는 모든 키워드를 조회...

--------------------------------------------------------------------------------

WITH KEYWORD_INFO AS (
SELECT '우리 나라' AS KEYWORD
UNION ALL
SELECT '우리 산야' AS KEYWORD
UNION ALL
SELECT '우리 가족' AS KEYWORD
UNION ALL
SELECT '나라 우리' AS KEYWORD
UNION ALL
SELECT '야구 두산' AS KEYWORD
UNION ALL
SELECT '야구 롯데' AS KEYWORD
UNION ALL
SELECT '야구 엘지' AS KEYWORD
)
,SPLIT_KEYWORD AS (
SELECT VALUE, ROW_NUMBER() OVER(ORDER BY VALUE DESC) AS ROWNUM FROM dbo.FN_SPLIT('우리 야구', ' ')
)
SELECT
*
FROM KEYWORD_INFO AS K
WHERE KEYWORD LIKE (SELECT VALUE FROM SPLIT_KEYWORD WHERE ROWNUM = 1) + '%'
OR KEYWORD LIKE (SELECT VALUE FROM SPLIT_KEYWORD WHERE ROWNUM = 2) + '%'

쿼리 결과

----------------------------------------------------

KEYWORD

----------
우리 나라
우리 산야
우리 가족
야구 두산
야구 롯데
야구 엘지

참고로 위 쿼리에서 사용된 FN_SPLIT 함수입니다.

----------------------------------------------------

CREATE FUNCTION [dbo].[FN_SPLIT]
(
@StrValue VARCHAR(1000), -- 분리할 문자열
@SplitChar VARCHAR(1) -- 구분할 문자
)
RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) )
AS
BEGIN
DECLARE @oPos INT, @nPos INT
DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수

SET @oPos = 1 -- 구분문자 검색을 시작할 위치
SET @nPos = 1 -- 구분문자 위치

WHILE (@nPos > 0)
BEGIN

SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos )


IF @nPos = 0
SET @TmpVar = RIGHT(@StrValue, LEN(@StrValue)-@oPos+1 )
ELSE
SET @TmpVar = SUBSTRING(@StrValue, @oPos, @nPos-@oPos)

IF LEN(@TmpVar)>0
INSERT INTO @SPLIT_TEMP VALUES( @TmpVar )


SET @oPos = @nPos +1
END


RETURN
END

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 40012
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 21950
7043 cte를 이용 이중트리구조를 출력하려합니다. [1] gtm100 2013.07.25 5198
7042 MsDtsSrvr.exe 오류가 나네요 곰팡이 2013.07.25 7931
7041 SqlServer 2012 인스탄스 제거 질문드립니다. [2] 힘내라장코치 2013.07.25 5010
7040 mssql 7 desktop 버젼 구할 방법이 없을까요 ? [1] 어둠별빛 2013.07.24 4525
7039 쿼리 수정 설명 부탁드립니다. [2] rx프로그래머rx 2013.07.24 4540
7038 키워드 검색을 하는데, 다중 키워드를 and 조건으로 검색하는 경우 [4] 더따뜻한 2013.07.24 7186
7037 데이터의 날짜보다 빠른 모든 6개월 내의 데이터와 조인 질문 [1] 슈팅스타 2013.07.24 4775
7036 해외 호스팅 서버쪽에 SQL2005 서버로 이전 작업 문의드립니다. [2] Larry 2013.07.23 5271
» 쿼리 고수님들께 문의좀 드립니다. ^^ [2] 남자나무 2013.07.23 5631
7034 mdf 파일 손상히 tail log 백업 방법 [2] Tommy Hilfi 2013.07.23 5540
7033 질문드립니다 [1] 잉잉 2013.07.23 4813
7032 그룹별 곱하기 [1] taz2315 2013.07.23 9144
7031 쿼리 문의드립니다 [1] kyuni01 2013.07.22 4362
7030 커서 문법 질문이 있습니다.(초보) [1] alima 2013.07.22 4999
7029 도와주세요!! MYsql 쿼리입니다.ㅜ [1] rx프로그래머rx 2013.07.22 6235
7028 xlsx 엑셀 파일 (시트당 50만건) 데이터를 MS SQL 2000 또는 2005로 옮기기 [5] Larry 2013.07.22 13381
7027 공백인식 문의입니다. [2] 거저먹네 2013.07.22 6858
7026 [급] 복구 방법 문의 [2] 아레아 2013.07.22 4981
7025 MSSQL 2012에서는 *= 안먹히나요??? [3] 떨거지희 2013.07.22 8595
7024 쿼리 실행계획 확인 부탁드립니다. [1] 꿀덩이 2013.07.22 4804





XE Login