Principales respuestas
Dividir una cadena de valores separados por un espacio SQL Server

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