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.

Convertir varchar a entero desde una subcadena.

Utilizando Microsoft SQL Server 2019:

Entonces he extraído varias columnas de un campo de texto grande y necesitaré usar los datos extraídos como multiplicador para otros campos. Aquí hay una sola columna extraída principalmente para contexto:

SUBSTRING(curv.curv_data, 
          CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data)) + 9, 
          (CHARINDEX(')()', curv.curv_data, CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||2', curv.curv_data))) - 9) - CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data) + 9)) PctUsage1

Aquí está el resultado:

|PctUsage1|
|--|
|5
|3.5
|0.5
|6.5
|5
|9
|1
|1.3
|1.5
|25.
|4
|0.0
|1.2

Entonces, dado que hay 0 y 0.5, tengo dificultades para convertir esta columna en algo útil. El resultado final que me gustaría obtener es convertir estos valores en porcentajes utilizables. Por ejemplo, convertir 5 en 0.05 y así sucesivamente.

Voy a utilizar el código SQL anterior en un subselect que luego se utilizará como multiplicador para el campo de horas trabajadas. Aquí tienes un ejemplo del campo multiplicador:

|Working_hours|
|--|
|51.600006
|0.000000
|20.799993
|8.399999
|28.799999
|86.027731
|5.199999

Esta es la línea que me gustaría poder usar:

PctUsage1 * Working_hours curved_hours,

Entonces, “working_hours” ya es un entero, pero “Pctusage1” es una cadena de caracteres.

Gracias de antemano por tu ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir los valores en la columna PctUsage1 a porcentajes utilizables, puedes usar la función CAST o CONVERT en SQL Server. Aquí tienes un ejemplo de consulta que debería funcionar:

    SELECT 
        CAST(REPLACE(PctUsage1, '.', '') AS FLOAT) / 100 AS PctUsage,
        Working_hours * CAST(REPLACE(PctUsage1, '.', '') AS FLOAT) / 100 AS curved_hours
    FROM YourTable
    

    Esta consulta utiliza la función REPLACE para eliminar el punto decimal de los valores de PctUsage1, para luego convertir la cadena resultante en un tipo de dato FLOAT. Luego se divide ese valor por 100 para obtener el porcentaje decimal. Finalmente, multiplica el porcentaje decimal por el valor de Working_hours para obtener el valor de curved_hours.

    Ten en cuenta que esto asume que todos los valores en la columna PctUsage1 son porcentajes válidos con un punto decimal. Si hay otros valores (como el valor “25.” en tu ejemplo), es posible que debas agregar lógica adicional para manejarlos.

Comments are closed.