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

Bagaimana cara membagi bidang data simbol pada tabel temp menjadi 5 kolom?

Solusinya mudah:

  1. bagi nilai dengan \s (spasi) menjaga urutan elemen
  2. memutar hasil
  3. ekstrak hanya angka atau hanya huruf dari kolom tertentu

Untuk membagi nilai, Anda dapat menggunakan XML seperti ini . Untuk mengekstrak hanya angka, Anda dapat melakukan rangkaian REPLACE s menghapus semua unit. Untuk menghapus angka dan meninggalkan teks, Anda dapat menggunakan REPLACE s lagi.

Di lingkungan saya, saya menggunakan banyak fungsi SQL CLR dan solusinya terlihat seperti ini:

SELECT PVT.id
      ,PVT.symbolData
      ,dbo.fn_Utils_RegexReplace ([0], '[^\d+]', '') AS [valuebefore]
      ,dbo.fn_Utils_RegexReplace ([0], '\d+', '') AS [unitbefore]
      ,[1] AS [symbole]
      ,dbo.fn_Utils_RegexReplace ([2], '[^\d+\.]', '') AS [valueafter]
      ,dbo.fn_Utils_RegexReplace ([2], '[\d+\.]', '') AS [unitafter]
FROM #TEMP
CROSS APPLY dbo.fn_Utils_RegexSplitWithOrder (SymbolData, '\s') RS
PIVOT
(
    MAX([value]) FOR [index] IN ([0], [1], [2])
) PVT
ORDER BY PVT.id;

Anda dapat memeriksa ini jawaban untuk mendapatkan fungsi seperti itu di lingkungan Anda juga.

Dalam kasus Anda, akan lebih mudah dan aman menggunakan XML untuk membagi data dan menggantinya untuk membentuk hasil.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan ID catatan yang terakhir dimasukkan

  2. Bagaimana cara menambahkan kunci utama auto_increment di database SQL Server?

  3. Hasilkan sertifikat yang ditandatangani sendiri dengan Root CA Signer

  4. Format Mata Uang SQL Server 2005 dengan koma dan titik

  5. Cara mendeteksi dan mencegah pertumbuhan tak terduga dari database SQL Server TempDB