locked
Dividir una cadena de valores separados por un espacio SQL Server RRS feed

  • Pregunta

  • Buenas, 

    estoy trabajando en SQL server, tengo una columna denominada 'TIPO' con los datos:

    TIPO
    ABC00001 AZUL
    ABC00002 ROJO
    ABC00003 VERDE

    Necesito obtener los datos de esta columna en dos (sin el espacio): 

    CODIGO NOMBRE
    ABC00001 AZUL
    ABC00002 ROJO
    ABC00003 VERDE

    muchas gracias de antemano!

    un saludo

    lunes, 9 de julio de 2018 13:43

Respuestas

  • Chequea las funciones de cadenas como CHARINDEX, PATINDEX, LEFT, SUBSTRING o si usas la version 2017 entonces la funcion SPLIT_STRING.

    DECLARE @T table (
    col1 int NOT NULL IDENTITY PRIMARY KEY,
    col2 varchar(50)
    );
    
    INSERT INTO @T (col2)
    VALUES
    	('ABC00001 AZUL'),
    	('ABC00002 ROJO'),
    	('ABC00003 VERDE');
    
    SELECT
    	col1,
    	col2,
    	LEFT(col2, CHARINDEX(' ', col2) - 1) AS col3,
    	SUBSTRING(col2, CHARINDEX(' ', col2) + 1, 50) AS col4
    FROM
    	@T
    ;

    Si el espacio no esta presente siempre como parte del valor entonces habra que ajustar la sugerencia.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Javi Fernández F lunes, 9 de julio de 2018 16:50
    • Marcado como respuesta MinerData miércoles, 11 de julio de 2018 15:06
    lunes, 9 de julio de 2018 15:27

Todas las respuestas

  • Chequea las funciones de cadenas como CHARINDEX, PATINDEX, LEFT, SUBSTRING o si usas la version 2017 entonces la funcion SPLIT_STRING.

    DECLARE @T table (
    col1 int NOT NULL IDENTITY PRIMARY KEY,
    col2 varchar(50)
    );
    
    INSERT INTO @T (col2)
    VALUES
    	('ABC00001 AZUL'),
    	('ABC00002 ROJO'),
    	('ABC00003 VERDE');
    
    SELECT
    	col1,
    	col2,
    	LEFT(col2, CHARINDEX(' ', col2) - 1) AS col3,
    	SUBSTRING(col2, CHARINDEX(' ', col2) + 1, 50) AS col4
    FROM
    	@T
    ;

    Si el espacio no esta presente siempre como parte del valor entonces habra que ajustar la sugerencia.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Javi Fernández F lunes, 9 de julio de 2018 16:50
    • Marcado como respuesta MinerData miércoles, 11 de julio de 2018 15:06
    lunes, 9 de julio de 2018 15:27
  • Los datos que he puesto son ejemplo, la tabla que utilizo tiene miles de registros que pueden ir cambiando, 

    no puedo meter valores hardcode, por lo que la opción que comentas no me sirve de mucho...

    utilizo la version 2012 (110).. por lo que no puedo utilizar split_string 

    en cualquier caso, ya he conseguido hacerlo:

    SELECT

    LEFT (TIPO,8) AS CODIGO,
    SUBSTRING(TIPO,10,100) AS NOMBRE


    gracias,

    un saludo


    • Editado MinerData lunes, 9 de julio de 2018 16:07
    lunes, 9 de julio de 2018 15:39
  • Hola MinerData:

    La opción que te ha puesto Hunchback, es perfecta. Fíjate bien que te ha dado las claves. Y los puntos de búsqueda de conocimiento para hacerlo tu mismo.

    create table tablaEjemplo (TIPO VARCHAR(100))
    GO
    INSERT INTO tablaEjemplo (TIPO) VALUES 
    ('ABC00001 AZUL'),
    ('ABC00002 ROJO'),
    ('ABC00003 VERDE')
    GO
    /*hasta aquí la presentación del escenario */
    
    SELECT LEFT(TIPO,CHARINDEX(' ',TIPO)-1) AS CODIGO,
    SUBSTRING(TIPO,CHARINDEX(' ',TIPO)+1,LEN(TIPO)) AS NOMBRE
     FROM TABLAEJEMPLO

    Resultado

    Un saludo

    lunes, 9 de julio de 2018 16:50
  • Cierto! disculpad!

    miércoles, 11 de julio de 2018 15:07
  • Hola,

    Mirando un compañero y yo buscamos la manera de hacer la separación preguntas con case, usando funciones como charindex para preguntar posiciones, substring para extraer los datos según esas posiciones y métodos de limpieza como rtrim y ltrim por si hay espacios adelante y atrás de los textos:

    Supongamos que tenemos un nombre con espacios:

    CAMPO_TABLA tiene el dato "VIVIANA MARCELA":

    Lo que hará es en COL_NOMBRE_1 colocar "VIVIANA" y en COL_NOMBRE_2 colocar "MARCELA" así:

    CASE 
        WHEN CHARINDEX(' ', RTRIM(LTRIM(CAMPO_TABLA))) = 0 
        THEN RTRIM(LTRIM(
    CAMPO_TABLA))
        ELSE SUBSTRING(RTRIM(LTRIM(
    CAMPO_TABLA)),0,CHARINDEX(' ', RTRIM(LTRIM(CAMPO_TABLA)))) 
        END  COL_NOMBRE_1,
        CASE 
        WHEN CHARINDEX(' ', RTRIM(LTRIM(
    CAMPO_TABLA))) > 0 
        THEN RTRIM(LTRIM(SUBSTRING(RTRIM(LTRIM(
    CAMPO_TABLA)),CHARINDEX(' ', RTRIM(LTRIM(CAMPO_TABLA)))+1,len (RTRIM(LTRIM(CAMPO_TABLA))))))
        ELSE ''
        END 
    COL_NOMBRE_2,

    Esperamos sirva de algo.

    viernes, 3 de marzo de 2023 16:06