가끔 긴 문자열에서 각 단어들을 분리하여 테이블에 저장하고 싶을 경우가 있습니다. 이때 사용할 수 있는 쿼리를 소개하고자 합니다. 먼저 아래 쿼리를 실행합니다.
SET QUOTED_IDENTIFIER OFF
GO
DECLARE @str varchar(2000);
SELECT @str =
"A lonely moon about the sky,
A gentle flower in the breeze,
A giant cloud of smoky stars,
Some sticky honey made by bees.
The soft sweet voice of melody
And moist warm air, which we all breathe
Tremendous power of our minds
Which can make everyone believe..."
SELECT @str = REPLACE(@str, CHAR(10), ' ');
SELECT @str = REPLACE(@str, CHAR(13), ' ' );
WITH ProcessText AS
(SELECT 1 as startPos, CHARINDEX (' ',@str, 1) as spacePos
UNION ALL
SELECT spacePos + 1, CHARINDEX (' ',@str, spacePos + 1)
FROM ProcessText WHERE spacePos > 0)
SELECT startPos,
spacePos,
SUBSTRING(@str, startPos, spacePos - startPos) AS singleWord
INTO #words
FROM ProcessText WHERE spacePos <> 0
UNION ALL
SELECT MAX(spacePos) + 1, 0, RIGHT(@str, LEN(@str) - MAX(spacePos))
FROM ProcessText
OPTION(MAXRECURSION 0);
위의 쿼리를 실행 후 #words 테이블을 조회해 보면 각 단어들이 모두 분리되어 각각의 위치 정보와 함께 저장되어 있음을 알 수 있습니다.
SELECT * FROM #words
startPos spacePos sepWord----------- ----------- --------1 2 A3 9 lonely10 14 moon15 20 about21 24 the25 29 sky,30 30 31 32 A33 39 gentle40 46 flower. . . . . . . . . . . . . . . . .112 116 made117 119 by120 125 bees.126 126 127 127 128 128 129 132 The. . . . . . . . . . . . . . .244 248 make249 257 everyone258 0 believe...
</PRE><PRE>또한 문자열에 총 몇개의 단어가 있는지 검사하기 위해서는 아래의 쿼리를 사용할 수 있습니다.
</PRE><PRE>SELECT COUNT(*) AS numWords FROM #words WHERE singleWord <>'';
</PRE><PRE>Result:numWords-----------48
</PRE><PRE>마지막으로 문자열에 나타난 각 단어들의 빈도수를 분석하는 쿼리입니다.
</PRE><PRE>SELECT COUNT(*) AS wordFrequency, singleWord FROM #words GROUP BY singleWord;-- Result:wordFrequency singleWord9 3 A1 about1 air,1 all1 And1 bees.1 believe...1 breathe1 breeze,1 by1 can. . . . . . . . . . . .1 sticky1 sweet3 The1 Tremendous1 voice1 warm1 we2 Which
</PRE>
[출처] 웹디황용
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
![]() |
☞자세히보기 |
|
|