查詢統計需將分隔字串(如 'A:B:C:D:E')拆分為資料列,SQL Server 內建無 Split 函數,自行實作表值函數 (TVF) 解決。
CREATE FUNCTION f_split (
@SourceSql VARCHAR(8000),
@StrSeprate VARCHAR(10)
)
RETURNS @temp TABLE (a VARCHAR(100))
AS
BEGIN
DECLARE @i INT;
SET @SourceSql = RTRIM(LTRIM(@SourceSql));
SET @i = CHARINDEX(@StrSeprate, @SourceSql);
WHILE @i >= 1
BEGIN
INSERT @temp VALUES (LEFT(@SourceSql, @i - 1));
SET @SourceSql = SUBSTRING(@SourceSql, @i + 1, LEN(@SourceSql) - @i);
SET @i = CHARINDEX(@StrSeprate, @SourceSql);
END
IF @SourceSql <> ''
INSERT @temp VALUES (@SourceSql);
RETURN;
END
SELECT * FROM dbo.f_split('A:B:C:D:E', ':');
回傳結果:
| a |
|---|
| A |
| B |
| C |
| D |
| E |
STRING_SPLIT 函數(原生優化),優先使用。XML 技巧或 Tally Table/Numbers Table 集合式寫法提升效能。VARCHAR(100),實務上可依需求調整為 NVARCHAR(MAX) 或加入欄位長度參數。