#sql-server
#sql-сервер
Вопрос:
Я импортировал большую электронную таблицу Excel в свою базу данных SQL Server, и все столбцы по умолчанию имеют varchar
тип данных. У меня также есть NULL
значения в моих столбцах ( sale
column). Я хочу выбрать sale volume
as float (double)
, который находится в varchar
формате.
Мой запрос выглядит следующим образом, но я все еще получаю ошибку преобразования.
SELECT
[CompanyCode] AS 'Company Code',
[Sitecode] AS 'Site Code',
[Product] AS 'Product Name',
'' AS 'Tank ID',
CONVERT(DATE, [InvDay]) AS Date,
CAST([Sales] AS DECIMAL) AS 'Sale Volume',
'' AS 'Record ID'
FROM
[dbo].[2019-01]
Комментарии:
1. Вы уверены, что у вас есть все значения в десятичном формате? Чтобы устранить эту ошибку, попробуйте использовать Try_cast и укажите точность в десятичной системе счисления (например, Try_CAST([Sales] как десятичное число (10,5)), чтобы избежать потери любого десятичного значения, а Try_Cast исправит любую ошибку преобразования, преобразовав ее в nulls
2. @Avi спасибо, я предоставил свой обновленный запрос в качестве ответа.
Ответ №1:
Я изменил свой запрос следующим образом, и он работает..
select
[CompanyCode] as 'Company Code',
[Sitecode] as 'Site Code',
[Product] as 'Product Name',
'' as 'Tank ID',
CONVERT(date, [InvDay]) as Date,
SaleV=(CASE
WHEN [Sales] ='NULL' THEN 0
WHEN [Sales] = '' then 0
ELSE
CONVERT(decimal(10,4) ,[Sales] )
END)
FROM [dbo].[2018-01]
Комментарии:
1. try_cast сделал бы то же самое / подобное без инструкции case
Ответ №2:
Вы можете попробовать это — изменить свой запрос. Используется функция IsNull() для обработки нулевого значения.
select
[CompanyCode] as 'Company Code',
[Sitecode] as 'Site Code',
[Product] as 'Product Name',
'' as 'Tank ID',
CONVERT(date, [InvDay]) as Date,
CAST(ISNULL([Sales],0) as decimal(10,2)) as 'Sale Volume',
'' as 'Record ID'
From [dbo].[2019-01]
Примечание: Приведенный выше запрос вернет 0.00 в случае null и выдаст ошибку в случае string. для обработки строкового значения используйте приведенный ниже запрос, приведенный ниже запрос вернет 0.00 в случае строки или NULL, в противном случае преобразуйте в десятичное число
select
[CompanyCode] as 'Company Code',
[Sitecode] as 'Site Code',
[Product] as 'Product Name',
'' as 'Tank ID',
CONVERT(date, [InvDay]) as Date,
ISNULL(TRY_CAST([Sales] as decimal(10,2)), 0) as 'Sale Volume',
'' as 'Record ID'
From [dbo].[2019-01]