Был поиск часа и не нашел ответа, который касается того, что происходит с моим кодом. Этот запрос счастливо возвращает данные:Ошибка арифметического переполнения преобразования varchar в тип данных числовой - не удается найти ответ, который соответствует
WITH RESULTS_TEST_COMPONENT_CTE(RequisitionNumber, ResultsName, ResultValue)
AS
(
SELECT [RequisitionNumber]
,[ResultsName]
,LTRIM(RTRIM([ResultValue]))
FROM dbo.RESULTS_TEST_COMPONENT
--WHERE TestGroupNumber IN ('T4367', 'T8033')
WHERE SUBSTRING(RequisitionNumber, 2, 4) = '1521'
AND ResultsName = 'HEMOGLOBIN A1C'
AND ISNUMERIC(ResultValue) = 1
)
, RESULTS_TEST_COMPONENT_CTE2(RequisitionNumber, ResultsName, ResultValue)
AS
(
SELECT RequisitionNumber
,ResultsName
,CAST(ResultValue AS decimal(3,1)) AS ResultValue
FROM RESULTS_TEST_COMPONENT_CTE
)
SELECT * FROM RESULTS_TEST_COMPONENT_CTE2
Вот первые несколько строк данных, так же, как и ожидалось:
RequisitionNumber ResultsName ResultValue
C1521020510 HEMOGLOBIN A1C 5.9
C1521044250 HEMOGLOBIN A1C 5.4
C1521123010 HEMOGLOBIN A1C 5.6
C1521121420 HEMOGLOBIN A1C 5.8
C1521102210 HEMOGLOBIN A1C 13.2
Однако, когда я изменить последнюю строку на это, он бросает «Арифметическое переполнение ошибка преобразования varchar в тип данных числовой. " Ошибка:
SELECT * FROM RESULTS_TEST_COMPONENT_CTE2
WHERE CAST(ResultValue AS decimal(3,1)) BETWEEN 7.5 AND 10
Я также получаю сообщение об ошибке, если я оставить из «CAST» и просто поставить WHERE ResultValue BETWEEN 7.5 AND 10
. Я подтвердил, что все данные в столбце ResultValue являются числовыми в формате 00.0. Мне нужно, чтобы предложение WHERE выполняло требование, чтобы значение было> = 7.5 и < = 10. Я ожидал, что он вернет эту последнюю строку, где ResultValue - 13.2, но вместо этого я получаю эту ошибку. Может ли кто-нибудь сказать мне, в чем проблема?
(я получаю сообщение об ошибке, если я использую только первый КТР.)
Что делать, если вы попробуете «МЕЖДУ CAST» (7.5 AS decimal (3,1)) И CAST (10 AS decimal (3,1)) »вместо BETWEEN 7.5 И 10 –