SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Разделяне на стойност на едно поле на множество стойности на колони с фиксирана дължина в T-SQL

Тъй като сте .net разработчик Предполагам, че ще ви бъде лесно да напишете .net функция, която можете да използвате във вашия T-SQL код. За да напишете SQL CLR функции проверка този отговор (Използвах една от връзките за внедряване на SQL CLR функция за регулярни изрази.

Да приемем, че трябва да разделите стойностите на парчета с дължина 4 и да покажете максимум 6 от тях:

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;

Сега данните са разделени. Нека pivot и показва само 6 от парчетата:

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;

Тук използвам regex функция за разделяне на данните и PIVOT за създаване на колони и изключване на някои от парчетата. Вече можете да вмъкнете данните в таблицата, за да ги материализирате и след това да ги експортирате. Можете да внедрите такава функция, като използвате връзката по-горе или да създадете своя собствена функция, като правите нещо, от което се нуждаете.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Резултатите от копиране и поставяне на Microsoft SQL Server в Excel не работят

  2. В SSMS, как да променя името на раздела на прозореца на SQL заявка?

  3. Грешка при инсталиране на SSDT (SQL Server Data Tools)

  4. Преобразуване на колона от дата в дата и час

  5. Защо имената на псевдонимите са същите като имената на колоните, когато се съхраняват като изглед?