Pada SQL Server tahun 2016 atau yang lebih baru terdapat fungsi STRING_SPLIT, yang dapat digunakan untuk membagi atau memisahkan teks berdasarkan karakter pemisah tertentu. Misalnta text string dengan pemisah koma seperti query berikut ini:
SELECT *
FROM STRING_SPLIT('Indonesia,Singapore,Vietnam',',')
FROM STRING_SPLIT('Indonesia,Singapore,Vietnam',',')
Atau teks yang dipisah dengan tanda pagar seperti berikut:
Tapi untuk SQL Server versi sebelum 2016 mungkin belum bisa menggunakan STRING_SPLIT, karena itu kita bisa membuat function sendiri dengan menggunakan looping.
CREATE FUNCTION [dbo].StringSplit
(
@String VARCHAR(MAX), @Separator CHAR(1)
)
RETURNS @RESULT TABLE(Value VARCHAR(MAX))
AS
BEGIN
DECLARE @SeparatorPosition INT = CHARINDEX(@Separator, @String ),
@Value VARCHAR(MAX), @StartPosition INT = 1
IF @SeparatorPosition = 0
BEGIN
INSERT INTO @RESULT VALUES(@String)
RETURN
END
SET @String = @String + @Separator
WHILE @SeparatorPosition > 0
BEGIN
SET @Value = SUBSTRING(@String , @StartPosition, @SeparatorPosition- @StartPosition)
IF( @Value <> '' )
INSERT INTO @RESULT VALUES(@Value)
SET @StartPosition = @SeparatorPosition + 1
SET @SeparatorPosition = CHARINDEX(@Separator, @String , @StartPosition)
END
RETURN
END
(
@String VARCHAR(MAX), @Separator CHAR(1)
)
RETURNS @RESULT TABLE(Value VARCHAR(MAX))
AS
BEGIN
DECLARE @SeparatorPosition INT = CHARINDEX(@Separator, @String ),
@Value VARCHAR(MAX), @StartPosition INT = 1
IF @SeparatorPosition = 0
BEGIN
INSERT INTO @RESULT VALUES(@String)
RETURN
END
SET @String = @String + @Separator
WHILE @SeparatorPosition > 0
BEGIN
SET @Value = SUBSTRING(@String , @StartPosition, @SeparatorPosition- @StartPosition)
IF( @Value <> '' )
INSERT INTO @RESULT VALUES(@Value)
SET @StartPosition = @SeparatorPosition + 1
SET @SeparatorPosition = CHARINDEX(@Separator, @String , @StartPosition)
END
RETURN
END
Execute SQL diatas untuk membuat fungsi di database kita. Kemudian berikut ini contoh query untuk menggunakannya:
SELECT * FROM
StringSplit('Indonesia,Singapore,Vietnam',',')
SELECT * FROM
StringSplit('Indonesia#Singapore#Vietnam','#')
StringSplit('Indonesia,Singapore,Vietnam',',')
SELECT * FROM
StringSplit('Indonesia#Singapore#Vietnam','#')
0 Comments