SQL Server에서 master.dbo.spt_values 테이블의 목적은 무엇입니까?솔직히 모르겠지만 쿼리 에서이 테이블을 많이 사용합니다.이 테이블은 마스터 데이터베이스에 상주하며“number”라는 열에 0에서 2047 사이의 시퀀스 번호가 있으며“P”유형 (SELECT number FROM master..spt_values 여기서 type = 'p')입니다.지금까지이 표에 대한 MSDN에는 사용 가능한 문서가 없습니다.문제는이 테이블이 어떻게 우리에게 유용할까요?이것은 숫자 순서를 가지고 있기 때문에 반복, 재귀 등에 도움이 될 것입니다. 대부분의 데이터베이스에서 수동으로 작성된 간단한 숫자 표를 보았을 것입니다.데이터베이스에 데이터베이스가 없으면 걱정할 필요가 없습니다. 마스터 데이터베이스에 Microsoft가 있습니다.SQL Server에서 spt_values 테이블을 사용하여 수행 할 수있는 몇 가지 트릭에 대해 설명하겠습니다.
Trick 01 :문자열에서 문자, 숫자 및 특수 문자 찾기
DECLARE@tabletable (id intidentity(1,1), value nvarchar(100))
INSERTINTO@tableVALUES ('B65bfNM#*amF5*t'), ('4GZ_3h^2STJTZVG')
, ('4%bKU&hxgj7!3!t'), ('uX=g3PE+w&uVV!h')
--Find only English lettersSELECT
(SELECTSUBSTRING(value, number, 1)
FROM master..spt_values
WHERESUBSTRING(value, number, 1) LIKE'[A-Z]'AND type ='P'FOR xml PATH (''))
FROM@table--Find only numbersSELECT
(SELECTSUBSTRING(value, number, 1)
FROM master..spt_values
WHERESUBSTRING(value, number, 1) LIKE'[0-9]'AND type ='P'FOR xml PATH (''))
FROM@table--Find only special charactersSELECT
(SELECTSUBSTRING(value, number, 1)
FROM master..spt_values
WHERESUBSTRING(value, number, 1) LIKE'[^0-9]'ANDSUBSTRING(value, number, 1) LIKE'[^A-Z]'AND type ='P'FOR xml PATH (''))
FROM@table
Trick 02 :한 해의 모든 월 이름 생성
SELECT TOP 12
DATENAME(MONTH, cast('2015 -'+ LTRIM(RTRIM(CAST(number asvarchar(2)))) +'-1'as datetime)) [MonthName]
FROM master..spt_values
WHERE Type ='P'and number >0ORDERBY Number
트릭 03 :쉼표로 구분 된 문자열 분리
DECLARE@varVARCHAR(100)
SET@var='I,Love,To,Share,My,Knowledge,On,SQLIndia.com'SELECTSUBSTRING
(
','+@var+',',
Number +1,
CHARINDEX
(
',',
','+@var+',',
Number +1
) - Number -1
) asvalueFROM master..spt_values
WHERE Number >=1AND Number < LEN(','+@var+',') -1ANDSUBSTRING(','+@var+',', Number, 1) =','AND type ='P'ORDERBY Number
트릭 o4 :두 날짜 사이의 날짜 순서 찾기
DECLARE@startDate SMALLDATETIME
, @endDate SMALLDATETIME
SET@startDate='20150101'SET@endDate='20150115'SELECT@startDate+ Number as [Date],
DATENAME(dw, @startDate+ Number) as [dtName]
FROM master..spt_values
WHERE@startDate+ Number <=@endDateAND type ='P'ORDERBY1
DECLARE@tabletable (id intidentity(1,1), value nvarchar(100))
INSERTINTO@tableVALUES ('B65bfNM#*amF5*t'), ('4GZ_3h^2STJTZVG')
, ('4%bKU&hxgj7!3!t'), ('uX=g3PE+w&uVV!h')
, ('4%bKU&hxgt'), ('uX=g3PVV!h')
DELETEFROM@tableWHERE id IN (3, 5)
SELECT*FROM@tableSELECT Number
FROM master..spt_values
WHERE Number NOTIN (SELECT ID FROM@table)
AND Number < (SELECTMAX(ID) FROM@table) and type='P'and number >0ORDERBY Number
거대한 테이블이 있고 ID 값이 2047보다 큰 경우이 방법은 시퀀스가 2047까지이므로 작동하지 않습니다