Escribí esta consulta para filtrar los resultados por debajo del 38 por ciento. Pero cuando ejecuto obtengo el resultado aleatorio sin errores y no los resultados esperados.

select Name, Percentage
from datamining.dbo.Register
where percentage <= '30%-40%'
   or percentage <= 'total 40% obtained'

La mesa real:

Name      Percentage
----      ----------
Andrew    30%-40%
Angel     35%
Bob       total 60%
Clare     total 38% obtained

El resultado esperado:

Name      Percentage
----      ----------
Andrew    30%-40%
Angel     35%
Clare     total 38% obtained

Hay cadenas presentes junto con el porcentaje y la consulta que escribí no me da los resultados esperados.

Ayúdame a recrear la condición que he pasado para que pueda lograr el resultado esperado.

0
Real Gem 13 mar. 2021 a las 07:40

3 respuestas

La mejor respuesta

Suponiendo que el porcentaje es menor que 100, el siguiente código calcula el valor numérico dentro de la columna de cadena y le da la lista de porcentajes que son menores o iguales a 38. Esto no funcionará en todos los casos ya que la columna de porcentaje no está normalizada.

SELECT Name, Percentage
FROM datamining.dbo.Register
WHERE SUBSTRING(Percentage, PATINDEX('%[0-9]%', Percentage),2) <= 38
0
Madhukar 13 mar. 2021 a las 05:34

La tabla debe tener el formato correcto, aquí el campo de porcentaje está en una cadena.

Puede comparar cadenas con las condiciones de filtrado, pero no se pueden comparar con '' Comparaciones matemáticas

0
Sarath KGW 13 mar. 2021 a las 06:32

podría dividir la cadena y hacer la comparación:

select r.*
from datamining.dbo.Register r
where exists (select 1
              from string_split(r.percentage, ' ') s
              where try_cast(replace(s.value, '%', '') as int) < 38
             );

Sin embargo, diría que tiene un problema fundamental con su modelo de datos. Parece que está intentando almacenar un rango de valores. Probablemente debería usar percentage_low y percentage_high o algo así. Una cadena es la forma incorrecta de almacenar estos valores, a menos que, por supuesto, esto provenga de un tercero y usted esté atascado con este formato.

0
Gordon Linoff 13 mar. 2021 a las 12:46