Конвертировать Varchar в Float MS SQL - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь преобразовать некоторые данные, которые я унаследовал от varchar, в float:

SELECT CAST([Column 8] AS Int)    FROM [Sean].[dbo].[ResApr2019]

Я получаю эту ошибку:

Сообщение 245, Уровень 16, Состояние 1, Строка 2 Преобразование не удалось при преобразовании значения varchar '14 714 000' в тип данных int.

Есть идеи, как обойти это?

Спасибо

Ответы [ 5 ]

4 голосов
/ 16 апреля 2019

удалите ',' из текста, попробуйте преобразовать его в десятичное, а затем в целочисленное значение.

SELECT CONVERT(decimal(11,0), REPLACE('14,714.000', ',', ''))

В вашем случае

SELECT CONVERT(decimal(11,0),REPLACE([Column 8],',','')) FROM [Sean].[dbo].[ResApr2019]

OR

 SELECT CONVERT(float,REPLACE([Column 8],',','')) FROM [Sean].[dbo].[ResApr2019]
1 голос
/ 16 апреля 2019

Используйте тип данных Money вместо float. money будет обрабатывать числа, разделенные запятыми.

select cast([Column 8] as money) from [sean].[dbo].[ResApr2019]
1 голос
/ 16 апреля 2019

Вам необходимо исправить тип (ы) данных.varchar не является числовым типом данных и не должен использоваться для хранения числовых значений.Вот почему вы получаете сообщение об ошибке, поскольку числовой тип данных не содержит запятых.Вы можете исправить ваши таблицы с помощью следующих операторов (при условии, что они все в формате %,0.000):

USE Sean;
GO
UPDATE TABLE dbo.ResApr2019
SET [LENGTH] = REPLACE([Column 8],',','');
ALTER TABLE A ALTER COLUMN [Column 8] int; --Other datatype with a scale/precision may be appropriate (like decimal)

Затем вы можете выполнить свой запрос без необходимости CAST:

SELECT [Column 8]
FROM [Sean].[dbo].[ResApr2019];
0 голосов
/ 16 апреля 2019

Проблема заключается в запятой в значении varchar. Удалив его до того, как вы выполните приведение или преобразование, вы исправите проблему. Вы случайно восстановили эту базу данных из резервной копии на другом сервере? Возможно, настройки вашего региона на вашем локальном компьютере отличаются от настроек сервера.

declare @test varchar(50) = replace('14,714.000 ', ',', '');
select @test;
select cast(@test as float)
select convert(float, @test)
0 голосов
/ 16 апреля 2019

Ваш код не работает из-за запятой и точки в вашей строке. Вы хотите удалить эти символы перед преобразованием в INT

 DECLARE @A VARCHAR(10) = '14,714.000'

DECLARE @B VARCHAR(20)
SET @B = REPLACE(REPLACE(@A, ',', ''), '.', '')

SELECT CAST(@A AS INT)--This code fails
SELECT CAST(@B AS INT)--This code works well

в вашем случае:

SELECT CAST(REPLACE(REPLACE([Column 8],',',''),'.','') AS Int)    FROM [Sean].[dbo].[ResApr2019]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...