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

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

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

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 23661
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12430
7040 mssql 7 desktop 버젼 구할 방법이 없을까요 ? [1] 어둠별빛 2013.07.24 4508
7039 쿼리 수정 설명 부탁드립니다. [2] rx프로그래머rx 2013.07.24 4516
7038 키워드 검색을 하는데, 다중 키워드를 and 조건으로 검색하는 경우 [4] 더따뜻한 2013.07.24 7152
7037 데이터의 날짜보다 빠른 모든 6개월 내의 데이터와 조인 질문 [1] 슈팅스타 2013.07.24 4736
7036 해외 호스팅 서버쪽에 SQL2005 서버로 이전 작업 문의드립니다. [2] Larry 2013.07.23 5244
» 쿼리 고수님들께 문의좀 드립니다. ^^ [2] 남자나무 2013.07.23 5598
7034 mdf 파일 손상히 tail log 백업 방법 [2] Tommy Hilfi 2013.07.23 5525
7033 질문드립니다 [1] 잉잉 2013.07.23 4793
7032 그룹별 곱하기 [1] taz2315 2013.07.23 9116
7031 쿼리 문의드립니다 [1] kyuni01 2013.07.22 4343
7030 커서 문법 질문이 있습니다.(초보) [1] alima 2013.07.22 4976
7029 도와주세요!! MYsql 쿼리입니다.ㅜ [1] rx프로그래머rx 2013.07.22 6205
7028 xlsx 엑셀 파일 (시트당 50만건) 데이터를 MS SQL 2000 또는 2005로 옮기기 [5] Larry 2013.07.22 13353
7027 공백인식 문의입니다. [2] 거저먹네 2013.07.22 6839
7026 [급] 복구 방법 문의 [2] 아레아 2013.07.22 4962
7025 MSSQL 2012에서는 *= 안먹히나요??? [3] 떨거지희 2013.07.22 8565
7024 쿼리 실행계획 확인 부탁드립니다. [1] 꿀덩이 2013.07.22 4775
7023 계층형 게시판에서 정렬순서. 클리티에 2013.07.22 9597
7022 MS SQL 디비 BAK 파일 복원 후, 검색 에러 shout 2013.07.20 5386
7021 짧은 쿼리인데 궁금한 부분이 있어 질문드립니다. [1] 트리플 2013.07.19 4252





XE Login