Приведение к десятичной дроби в SQL - PullRequest
0 голосов
/ 02 июля 2019

Максимальное значение в моей таблице для measure_rate составляет 572. Приведенный ниже запрос возвращает это значение.

SELECT cast(max(measure_rate) as decimal) 
FROM [SurgicalMeasures]
WHERE measure_rate != 'N/a'
      and zip_code = 21236 

Но когда я изменяю приведенный выше запрос на запрос ниже, он дает мне 95 в качестве максимального числа.

SELECT cast(max(measure_rate) as decimal) 
FROM [SurgicalMeasures]
WHERE measure_rate != 'N/a'

У меня вопрос: если я знаю, 572 это максимум measure_rate, почему эти запросы возвращают разные результаты?

Тип данных столбца measure_rate: varchar(50)

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Я бы предпочел обновить все N / A до нуля, как показано ниже

update SurgicalMeasures
set measure_rate=null
where  measure_rate != 'N/a'

Затем измените столбец с varchar на десятичный

ALTER TABLE SurgicalMeasures 
ALTER COLUMN measure_rate decimal(10,4); 

затем выполните ваш запрос

SELECT max(measure_rate) as mr
FROM [SurgicalMeasures]
0 голосов
/ 02 июля 2019

Попробуйте сначала привести к десятичному типу, затем возьмите максимальное из этого приведенного значения:

select max(cast(measure_rate as decimal(10,2))) as max_rate
from [SurgicalMeasures]
where measure_rate != 'N/a';

Потенциальная проблема с вашим текущим подходом состоит в том, что если measure_rate будет текстом, то он может неправильно сортироваться как число. То есть функция MAX() может возвращать неверное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...