SSMS
 sql >> Baza danych >  >> Database Tools >> SSMS

Podziel wartość pojedynczego pola na wiele wartości kolumn o stałej długości w T-SQL

Ponieważ jesteś .net programista Myślę, że napisanie pliku .net będzie dla ciebie łatwe funkcja, której możesz użyć w swoim T-SQL kod. Aby napisać SQL CLR sprawdź funkcje tę odpowiedź (Użyłem jednego z linków do zaimplementowania SQL CLR funkcja wyrażenia regularnego.

Załóżmy, że musisz podzielić wartości na kawałki o długości 4 i pokazać maksymalnie 6 z nich:

DECLARE @DataSouce TABLE
(
    [RecordID] TINYINT IDENTITY(1,1) PRIMARY KEY
   ,[RecordData] NVARCHAR(MAX)
);

INSERT INTO @DataSouce ([RecordData])
VALUES ('test some test goes here')
      ,('some numbers go here - 1111122222233333344444444445');


SELECT DS.[RecordID]
      ,RM.[MatchID]
      ,RM.[CaptureValue]
FROM @DataSouce DS
CROSS APPLY [dbo].[fn_Utils_RegexMatches] ([RecordData], '.{1,4}') RM;

Teraz dane są podzielone. Zróbmy pivot i pokaż tylko 6 porcji:

SELECT *
FROM
(
    SELECT DS.[RecordID]
          ,RM.[MatchID]
          ,RM.[CaptureValue]
    FROM @DataSouce DS
    CROSS APPLY [dbo].[fn_Utils_RegexMatches] ([RecordData], '.{1,4}') RM
) DS
PIVOT
(
    MAX([CaptureValue]) FOR [MatchID] IN ([0], [1], [2], [3], [4], [5], [6])
) PVT;

Tutaj używam regex funkcja podziału danych i PIVOT aby utworzyć kolumny i wykluczyć niektóre porcje. Możesz teraz wstawić dane do tabeli, aby je zmaterializować, a następnie wyeksportować. Możesz zaimplementować taką funkcję, korzystając z powyższego linku lub stworzyć własną funkcję, robiąc coś, czego potrzebujesz.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Autoinkrementacja klucza podstawowego w tabelach SQL

  2. Znajdź różnicę czasu między dwoma kolejnymi wierszami w tej samej tabeli w sql

  3. Eksplorator obiektów SSMS — wybierz brakujące pierwsze N ​​wierszy po połączeniu z usługą Azure DB

  4. show Utwórz polecenia dla tabeli w SQL Management Studio (2008)

  5. Jak mogę używać SQLCMD z uwierzytelnianiem Windows (-E,), ale bez podwyższonych uprawnień?