es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer número de un campo de cadena, incluyendo decimales, en SQL Server 18.

Quiero extraer números de un campo de texto que incluye decimales en SQL.

Mi código actual:

substring(a.LastTitrate,patindex('%[0-9]%', a.LastTitrate),patindex('%[0-9][^0-9]%', a.LastTitrate)-patindex('%[0-9]%', a.LastTitrateCumulativeVolume)+1) as mL

Mis resultados actuales:

0.542 mls    0
0.042 mls    0
0.317 mls    0

Resultado deseado:

0.542 mls  0.542
0.042 mls  0.042
0.317 mls  0.317 
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para extraer el número de un campo de texto que contiene decimales en SQL, puedes utilizar el siguiente código:

    CAST(SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate), 
        PATINDEX('%[^0-9.,]%', SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate), LEN(a.LastTitrate))) + 
            PATINDEX('%[0-9.,]%', a.LastTitrate) - 1) as DECIMAL(10, 3)) AS ExtractedNumber
    

    Explicación:

    • PATINDEX('%[0-9.,]%', a.LastTitrate) encuentra la primera ocurrencia de un dígito del 0 al 9, un punto o una coma en el campo LastTitrate.
    • SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate)) obtiene la subcadena comenzando desde el primer dígito, punto o coma.
    • PATINDEX('%[^0-9.,]%', SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate), LEN(a.LastTitrate))) encuentra la primera ocurrencia de un carácter que no sea un dígito, un punto o una coma después de la subcadena extraída anteriormente.
    • PATINDEX('%[0-9.,]%', a.LastTitrate) encuentra la primera ocurrencia de un dígito, un punto o una coma desde el inicio del campo.
    • PATINDEX('%[^0-9.,]%', SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate), LEN(a.LastTitrate))) + PATINDEX('%[0-9.,]%', a.LastTitrate) - 1 calcula la posición final de la subcadena que queremos extraer.
    • SUBSTRING(a.LastTitrate, PATINDEX('%[0-9.,]%', a.LastTitrate), ... extrae la subcadena entre el primer dígito, punto o coma y el primer carácter que no sea un dígito, un punto o una coma después de él.
    • CAST(... as DECIMAL(10, 3)) convierte la subcadena extraída en un número decimal con una precisión de 10 y una escala de 3.

    El resultado es una nueva columna llamada ExtractedNumber que contiene los números extraídos con decimales.

Comments are closed.