SQL Server - Números en cadena de caracteres.

 
Vista:
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 04/12/2015 18:29:13
Buenas y gracias de antemano a todos,

Necesito crear una función que sea capaz de sacar de una cadena de caracteres un número de 5 cifras en caso que exista.

Ejemplo: Alberto a comprado 25687 artículos.
Resultado devuelto por la función 25687

Muchas gracias por la atención y ayuda.
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Números en cadena de caracteres.

Publicado por Isaias (4558 intervenciones) el 04/12/2015 19:22:46
No comentas en que motor de base de datos trabajas, pero este lo he probado en SQL Server 2008 y superior y funciona.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
declare @len int,
        @x int,@y int
declare @val varchar(max)
declare @cad varchar(max)
declare @number varchar(max)
declare @cadena varchar(max)
 
 
    SET @val=''
    SET @number=''
    SET @cadena=''
    SET @cad='Alberto a comprado 25687 artículos'
    SET @x=1
    while @x<=len(@cad)
    begin
      SELECT @val=substring(@cad,@x,1)
 
      IF isnumeric(@val)=1
        begin
          SET @number=@number+@val
        end
      else
        begin
          SET @cadena=@cadena+@val
        end
      SET @x=@x+1
    end
 
    SELECT @cadena AS nombre, @number AS numero
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
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 04/12/2015 19:30:03
Hola Isaias,

Gracias por tu pronta respuesta, te comento. Trabajo con SQL. Siento no haber expuesto un mejor ejemplo.

El código que me facilitas no me vale porque en caso de existir más de un número en la cadena me los enlaza.

Ejemplo: Alberto a comprado 25687 de 300000 posibles.

Resultado: 25687300000.

Necesito solo extraer de la cadena los números de 5 cifras.

Gracias
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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Números en cadena de caracteres.

Publicado por Isaias (4558 intervenciones) el 04/12/2015 21:13:10
Exacto, creo que la exposicion no es muy clara, por ejemplo

¿Habra o puede haber mas numeros al inicio?

Juan Calvo 355 ha hecho un pago por 58974 y por ende faltan 25874

Si el numero de 5 posiciones esta SIEMPRE al inicio, entonces

1
SELECT @cadena AS nombre, left(@number, 5) AS numero
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
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 04/12/2015 21:21:47
Perdona tantas molestias Isaias y gracias nuevamente por tu ayuda.

Pueden existir muchos casos en la cadena como:

'En 3 de los 45 departamento con que cuenta la empresa existen 20012 empleados.' Se necesita extraer el número 20012.

'El puerto de x lugar tiene 25 barcos anclados en ellos existen un total de 85421 contenedores de los cuales 30 tienen destino Australia.' Se necesita extraer el número 85421.

Como ves el número de 5 cifras nunca esta en la misma posición y es lo complicado del tema.

Un saludo y gracias nuevamente.
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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Números en cadena de caracteres.

Publicado por Isaias (4558 intervenciones) el 04/12/2015 23:15:49
Y puede haber mas de 2 numeros de 5 posiciones????

'El puerto de x lugar tiene 25125 barcos anclados en ellos existen un total de 85421 contenedores de los cuales 30789 tienen destino Australia.'

¿Cual seria el numero a extraer?
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
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 04/12/2015 23:20:31
En toda la cadena solo hay un solo número de 5 cifras que seria el que hay que obtener por cada fila seleccionada.
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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Números en cadena de caracteres.

Publicado por Isaias (4558 intervenciones) el 04/12/2015 23:28:47
Veamos:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
declare @len int,
        @x int,@y int
declare @val varchar(max)
declare @cad varchar(max)
declare @number varchar(max)
declare @cadena varchar(max)
 
 
    SET @val=''
    SET @number=''
    SET @cadena=''
    SET @cad='En 3 de los 45 departamento con que cuenta la empresa existen 20012 empleados.'
    SET @x=1
    while @x<=len(@cad)
    begin
      SELECT @val=substring(@cad,@x,1)
 
      IF isnumeric(@val)=1
        begin
          SET @number = @number + @val
          if  len(@number) = 5
           break
        end
      else
        begin
          SET @cadena=@cadena+@val
          SET @number = ''
        end
      SET @x=@x+1
    end
 
    SELECT @cadena AS nombre, @number AS numero

Resultado:


nombre numero
En de los departamento con que cuenta la empresa existen 20012
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
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 04/12/2015 23:43:12
Perfecto Isaias, la he probado y me vale, solo adapto algunas cosillas y listo. Te dejo saber cuando la tenga lista y posteo el resultado final.

Un millón de gracias por tu tiempo.
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
sin imagen de perfil

Números en cadena de caracteres.

Publicado por Raudel (6 intervenciones) el 06/12/2015 13:02:11
Hola Isaias,

Esto código es sencillo y resuelve la problemática planteada y cubre todas las posibles casuisticas. He puesto unos ejemplos donde en el código que planteas no devuelve el número de 5 cifras ya que la "," el "." y el signo de de "-" para la función isnumeric entra dentro de los caracteres numéricos.

1
2
3
4
5
6
7
8
9
DECLARE @Cadena1 nvarchar(4000) = N'ISIDORO 10, 1-01, 07006, BALEARS';
SELECT SUBSTRING(@Cadena1, PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena1), CASE WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena1) = 0 THEN NULL ELSE 5 END);
 
DECLARE @Cadena2 nvarchar(4000) = N'AV  DEL 13, 2-002, TORREM, 29620, MAL';
SELECT SUBSTRING(@Cadena2, PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena2), CASE WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena2) = 0 THEN NULL ELSE 5 END);
 
 
DECLARE @Cadena4 nvarchar(4000) = N'AV BLAS  3, LOC-001, ALG, 11201, ';
SELECT SUBSTRING(@Cadena4, PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena4), CASE WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%', @Cadena4) = 0 THEN NULL ELSE 5 END)

Nuevamente un millón de gracias y si encuentras otra manera de resolverlo por favor dímelo.
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
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Números en cadena de caracteres.

Publicado por Isaias (4558 intervenciones) el 07/12/2015 22:23:50
Y si le haces un REPLACE a esos caracteres?
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