У меня есть поле varchar, которое всегда должно содержать числовое (десятичное) значение при применении фильтра. Но я получаю «Ошибка преобразования типа данных VARCHAR в числовой», когда я бегу SQL как это:Преобразование varchar в десятичный с использованием isnumeric без исключения исключения в SQL Server 2008
SELECT CAST(A.text AS numeric(38,16))
FROM Answers A
INNER JOIN Questions Q ON Q.ID = A.QuestionID
WHERE Q.Text = 'Rating'
AND isnumeric(A.text) = 1
Существует только одна величина, которая проходит IsNumeric тест, но не бросок:
DECLARE @text varchar(100)
SET @text = '2.83417869359255E-02'
SELECT CASE WHEN ISNUMERIC(@text) = 1 THEN CAST(@text AS NUMERIC(38,16)) ELSE NULL END
Как следует Я уверен, что такие ценности обрабатываются? В конце дня я хочу подсчитать все значения, которые меньше 5, поэтому числа, такие как «2.83417869359255E-02», могут быть округлены до нуля. Я также выполнить запрос, чтобы исследовать значения в таблице вместе с длиной VARCHAR с этими результатами:
MaxValue MinValue LenVarChar
-------------------- -------------------- -----------
0 0 1
10 10 2
2.2 9.2 3
3.55 6.32 4
5.453125 5.453125 8
2.79989361763 9.47216796875 13
2.089115858078 9.132080078125 14
1.1529632806778 9.8538990020752 15
0.64174896478653 9.83681106567383 16
0.111961431801319 0.991760730743408 17
2.83417869359255E-02 2.83417869359255E-02 20
На самом деле для моих целей (нахождение значения менее 5) можно преобразовать их все держаться на плаву. И в какой-то момент в будущем я создам десятичное поле в таблице «Ответ» для хранения десятичных ответов, а затем воспользуюсь этой методикой, чтобы заполнить ее из поля varchar. И для тех, кому нравится, когда нужно понимать поплавки, десятичные знаки и цифры, вот ссылка: http://stackoverflow.com/q/1056323/150342 – Colin