SQL Server - Extraccion de datos

   
Vista:

Extraccion de datos

Publicado por Daniel (3 intervenciones) el 14/06/2016 00:29:05
Requiero extraer datos de un campo en SQL por lo regular salen de esta manera
SER160610A_ORD0137477
SER160610B_ORD0137477
SER160610C_ORD0137477
SER16061301_ORD0137479
SER16061302_ORD0137479
SER16061303_ORD0137479
SER16061304_ORD0137479
SER16061305_ORD0137479
SER16061306_ORD0137479
SER16061307_ORD0137479
SER16061308_ORD0137479
SER16061309_ORD0137479
SER16061310_ORD0137479

lo que quiero solo el resultado del guion bajo hacia la izquierda lo demás no me funciona y las longitudes hacia la izquierda no son fijas varían los caracteres, por ejemplo:
SER160610A
SER160610B
SER160610C
SER16061309
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Extraccion de datos

Publicado por Rafael (88 intervenciones) el 14/06/2016 10:28:50
En principio creo aplica para cualquier version de SQL Server ... pero si no busca las diferencias de acuerdo a tu version


Veamos lo que necesitas saber son un par de temas:

1. El largo de tu cadena.
2. La posición del caracter buscado en la cadena.

Asi pues con la poca informacion proporcionada te doy una query tentativa que seguro tu podras corregir y dejar al 100%

1
2
SELECT SUBSTR(<campo>, (CHARINDEX('_', <campo>) + 1), (LEN(<campo>) - CHARINDEX('_', <campo>))) as NUEVO_CAMPO
FROM <tabla>

la funcion SUBSTR extrae los datos de una cadena (1er parámetro) a partir de una posicion (2o parámetro) y tantos caracteres como el 3er parámetro.

La Funcion CHARINDEX te devuelve la posición de lo que buscas en este caso el guión bajo "_", le sumamos un 1 por que tu quieres tomar la cadena a partir de la siguiente posicion.
Ejemplo:
1
2
3
SER160610A_ORD0137477
12345678901
         1
El guien esta en la posicion 11 y tu querras tomar desde la 12 hasta el final...

Como no sabes cual es el final lo calculas con la funcion LEN obtienes el largo de la cadena en este caso 21, le restas los 11 de la posicion del "_" y te queda a tomar 10 caracteres...

Resultato:
ORD0137477

Saludos

Pd. Si te sirve la info a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Isaias

Extraccion de datos

Publicado por Isaias (3186 intervenciones) el 14/06/2016 19:59:11
Excelente explicacion, yo diria pura logica aplicada a las matematicas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Extraccion de datos

Publicado por Daniel dancervel@hotmail.com (3 intervenciones) el 14/06/2016 21:03:43
muchas gracias por la ayuda sin embargo los campos a mostrar de la cadena era los primeros antes del guion, hice la modificacion de la consulta

SELECT ser_num,
ser_num_typ_id,
SUBSTR(ser_num, 1, (CHARINDEX('_', ser_num) - 1) ) as NUEVO_CAMPO
FROM inv_ser_num
where ser_num = 'SER16061307_ORD0137479'

Resultado: SER16061307

sin embargo al querer hacerlo con mas campos me manda error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Extraccion de datos

Publicado por Rafael (88 intervenciones) el 15/06/2016 11:20:26
Que error te manda???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Extraccion de datos

Publicado por Isaias (3186 intervenciones) el 15/06/2016 19:07:09
Si, que error te manda, porque sabemos algo de SQL pero las adivinanzas, no le hacemos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Extraccion de datos

Publicado por Daniel (3 intervenciones) el 15/06/2016 19:27:40
Invalid length parameter passed to the LEFT or SUBSTRING function.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Extraccion de datos

Publicado por Isaias (3186 intervenciones) el 15/06/2016 20:53:51
¿Alguna duda sobre el mensaje de error?

Se le esta pasando un LONGITUD no valida a la fucion SUBSTRING


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create table #strings (string1 varchar(500))
insert into #strings values ('
SER160610A_ORD0137477'),
('SER160610B_ORD0137477'),
('SER160610C_ORD0137477'),
('SER16061301_ORD0137479'),
('SER16061302_ORD0137479'),
('SER16061303_ORD0137479'),
('SER16061304_ORD0137479'),
('SER16061305_ORD0137479'),
('SER16061306_ORD0137479'),
('SER16061307_ORD0137479'),
('SER16061308_ORD0137479'),
('SER16061309_ORD0137479'),
('SER16061310_ORD0137479'),
('ESTA SERIA MI PRUEBA FINAL_LO DEMAS YA NO ME INTERESA')

SELECT SUBSTRING(string1, 1, CHARINDEX('_', string1) - 1)
FROM #strings
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar