Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memisahkan nilai yang dibatasi dalam kolom SQL menjadi beberapa baris

Jika Anda menggunakan SQL Server 2016+

Anda dapat menggunakan STRING_SPLIT yang baru fungsi, yang pernah saya buat di blog di sini, dan Brent Ozar pernah menulis di blog di sini.

SELECT s.[message-id], f.value
  FROM dbo.SourceData AS s
  CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;

Jika Anda masih menggunakan versi sebelum SQL Server 2016

Buat fungsi split. Ini hanyalah salah satu dari banyak contoh di luar sana:

CREATE FUNCTION dbo.SplitStrings
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, 
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO

Saya telah membahas beberapa lainnya di sini, di sini, dan pendekatan yang lebih baik daripada berpisah di sini.

Sekarang Anda dapat memperkirakan hanya dengan:

SELECT s.[message-id], f.Item
  FROM dbo.SourceData AS s
  CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;

Saya juga menyarankan untuk tidak meletakkan tanda hubung di nama kolom. Artinya, Anda harus selalu memasukkannya ke dalam [square brackets] .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kebiasaan Buruk:Menghindari NULL di SQL Server

  2. Jatuhkan kunci utama menggunakan skrip di database SQL Server

  3. Apa cara terbaik untuk menguji koneksi SQL Server secara terprogram?

  4. Tambahkan Offset Zona Waktu ke Nilai datetime2 di SQL Server (T-SQL)

  5. Perbarui beberapa kolom dalam SQL