AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 285743
Accepted
Mike S
Mike S
Asked: 2021-02-21 12:38:10 +0800 CST2021-02-21 12:38:10 +0800 CST 2021-02-21 12:38:10 +0800 CST

No SQL Server, qual é a melhor maneira de dividir várias strings delimitadas em linhas sem uma função?

  • 772

Eu sei que existem vários exemplos de como dividir strings no SQL Server. No entanto, eles geralmente são para uma única string delimitada. Qual é a melhor maneira de dividir várias strings delimitadas sem usar uma função (SQL Server 2016)?

Aqui está o que eu estou começando:

GroupId     Val1      Val2
----------- --------- ------
G1           1,2,3     a,b,c
G2           4,5,6     d,e,f
G3           1,2,3,4   w,x,y,z

Aqui está o que eu gostaria de terminar com:

GroupId Val1    Val2
------- ------- -------
G1      1       a
G1      2       b
G1      3       c
G2      4       d
G2      5       e
G2      6       f
G3      1       w
G3      2       x
G3      3       y      
G3      4       z      

Com base em tudo o que li, acho que posso precisar usar o método XML porque ele me permite especificar uma ordem, mas não consegui encontrar um exemplo desse método em que várias colunas sejam divididas.

Aqui está o T-SQL para criar a tabela de origem:

DROP TABLE IF EXISTS #TestData;

CREATE TABLE #TestData(GroupId VARCHAR(10),
                       Val1 VARCHAR(100),
                       Val2 VARCHAR(100)
                       );
INSERT INTO #TestData
VALUES ('G1', '1,2,3', 'a,b,c'),
       ('G2', '4,5,6', 'd,e,f'),
       ('G3', '1,2,3,4', 'w,x,y,z');

SELECT *
FROM #TestData;

Agradeço antecipadamente!

sql-server t-sql
  • 1 1 respostas
  • 963 Views

1 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2021-02-21T13:48:27+08:002021-02-21T13:48:27+08:00

    Transforme a string delimitada em uma matriz JSON e use OPENJSON, que expõe a ordenação léxica das matrizes. por exemplo

    este

    select *
    from openjson('["w","x","y","z"]')
    

    saídas

    key       value  
    --------- -------
    0         w      
    1         x      
    2         y      
    3         z      
    

    Então

    DROP TABLE IF EXISTS #TestData;
    
    CREATE TABLE #TestData(GroupId VARCHAR(10),
                           Val1 VARCHAR(100),
                           Val2 VARCHAR(100)
                           );
    INSERT INTO #TestData
    VALUES ('G1', '1,2,3', 'a,b,c'),
           ('G2', '4,5,6', 'd,e,f'),
           ('G3', '1,2,3,4', 'w,x,y,z');
    
    with q as
    (
      SELECT GroupId, concat('["',replace(Val1,',','","'),'"]') Val1,concat('["',replace(Val2,',','","'),'"]') Val2
      FROM #TestData
    )
    select GroupId, v1.value Val1, v2.value Val2
    from q
    cross apply openjson(Val1) v1
    cross apply openjson(Val2) v2
    where v1.[key] = v2.[key]
    

    saídas

    GroupId    Val1     Val2
    ---------- -------- ---------------
    G1         1        a
    G1         2        b
    G1         3        c
    G2         4        d
    G2         5        e
    G2         6        f
    G3         1        w
    G3         2        x
    G3         3        y
    G3         4        z
    
    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve