Вставить столбец vaues в Row sql server - PullRequest
0 голосов
/ 10 октября 2018

Я делю '0021C-15563017-2' на '-' и хочу вставить (0021c, 15563017, 2) в T2 (clntcode, certno.depcode), см. Изображение.Я попытался применить кросс для вставки значения разделения в строку таблицы (img 2), но не работает.

Я использовал запрос:

SELECT CLNTCODE, certno, depcode  
FROM T2  
CROSS APPLY STRING_SPLIT('0021C-15563017-2', '-');

img 1

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

Подход ниже может также использоваться, если подходит для кого-то.

INSERT INTO T2 (CLNTCODE, certno, depcode)
SELECT LEFT('0021C-15563017-2', CHARINDEX('-', '0021C-15563017-2') - 1) AS CLNTCODE,
LEFT(REPLACE('0021C-15563017-2', LEFT('0021C-15563017-2', CHARINDEX('-', '0021C-15563017-2')), ''), CHARINDEX('-', REPLACE('0021C-15563017-2', LEFT('0021C-15563017-2', CHARINDEX('-', '0021C-15563017-2')), '')) - 1) AS certno,
LEFT(REVERSE('0021C-15563017-2'), CHARINDEX('-', REVERSE('0021C-15563017-2')) - 1) AS depcode
0 голосов
/ 10 октября 2018

Я бы порекомендовал не использовать STRING_SPLIT здесь, потому что может быть трудно выловить три компонента из вашей строки, разделенной дефисом.Вместо этого я рекомендую использовать CHARINDEX:

WITH T2 AS (
    SELECT '0021C-15563017-2' AS col
)

SELECT
    LEFT(col, CHARINDEX('-', col) - 1) AS CLNTCODE,
    SUBSTRING(col,
              CHARINDEX('-', col) + 1,
              CHARINDEX('-', col, CHARINDEX('-', col) + 1) -
                  CHARINDEX('-', col) - 1) AS certno,
    SUBSTRING(col, CHARINDEX('-', col, CHARINDEX('-', col) + 1) + 1, LEN(col))
        AS depcode
FROM T2;

enter image description here

Демо

Обратите внимание, что STRING_SPLIT здесь будет сложно использовать, потому что трудно обратиться к данной записи из табличного ответа от этой функции.

0 голосов
/ 10 октября 2018

Вот, пожалуйста,

CREATE TABLE YourTable(
    CLNTCODE VARCHAR(25), 
    certno VARCHAR(25), 
    depcode VARCHAR(25)
    );

WITH StrTbl(Col1, Col3, Str) AS
(
SELECT LEFT(Str, CHARINDEX('-', Str) - 1) Col1,
       LEFT(REVERSE(Str), CHARINDEX('-', REVERSE(Str)) - 1) Col3,
       Str
FROM
    (
      SELECT '0021C-15563017-2' AS Str
      UNION
      SELECT '0021C-1-2'
    ) T
)

INSERT INTO YourTable (CLNTCODE, certno, depcode)
SELECT Col1,
       REPLACE(REPLACE(REPLACE(Str, Col1, ''), Col3, ''), '-', '') AS Col2,
       Col3
FROM StrTbl;

SELECT *
FROM YourTable;

Результаты:

+----+----------+----------+---------+
|    | CLNTCODE |  certno  | depcode |
+----+----------+----------+---------+
|  1 | 0021C    | 15563017 |       2 |
|  2 | 0021C    |        1 |       2 |
+----+----------+----------+---------+

Демо

0 голосов
/ 10 октября 2018
insert into t2 (CLNTCODE, certno, depcode  )
select *
from 
(
select *,row_number() over (order by value ) as rn  from STRING_SPLIT('0021C-15563017-2', '-')
) src
pivot
(
  max(value)
  for rn in ([1], [2], [3])
) piv;
...