Ранее у меня была похожая тема, которая превратилась в сложную проблему, которая, как мне кажется, не имеет реального решения.Надеюсь, я ошибаюсь, но вот суть.
Я определил типы данных для каждого члена таблицы как Varchar (80).Затем я загружаю данные из внешней системы (Oracle PBCS) в плоский файл с помощью инструмента интегратора, который загружает данные в таблицу.
Посредством процесса преобразования SQL - я преобразую или преобразовываю данные из varchar вчисловой или десятичный.Когда я делаю это, я получаю ошибку на некоторых значениях.С помощью запроса try_cast - я вижу, что является причиной того, что я не могу привести или преобразовать в числовое или десятичное число.
Извлечение загружает эти значения в научную запись - не уверен, почему исходная система полностью это делает - поэтому ярешил попытаться контролировать это в SQL - но, к сожалению, ничего не работает, так как мне нужно сначала преобразовать в число с плавающей точкой, прежде чем я преобразую в числовое или десятичное число.Для очень маленьких значений, таких как 6.27e ^ -19 - мой float просто уменьшает долю цента до 0 - в общем, float кажется очень плохой идеей для валюты.
Если я сохраню try_cast, тогда явернет нулевые значения - я действительно не могу этого сделать.
См. код ниже
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
1.455191522836685e-11
Это мои проблемы с помощью try_cast.
select
t.[acct_20010]
--convert(numeric(19,4), convert(float, t.[acct_20010]))
--cast( cast(t.[acct_20010] as float) as decimal(18,10))
-- ,CAST([Obligated] AS FLOAT)
-- ,CAST([Total_Expended] AS FLOAT)
-- ,CAST([Total_Obligated_FAMIS] AS FLOAT)
--,CAST([Spendplan_Balance] AS FLOAT)
--,CAST([Pending_Expenditures] AS FLOAT)
-- ,CAST([Unexpended_Balance] AS FLOAT)
--,CAST([Funds_Remaining_by_BBFY] AS FLOAT)
--,CAST([PY_Funds_Remaining] AS FLOAT)
--select t.[expended]
--from
from
(select [acct_20010] as [acct_20010]
--,[obligated],
--Total_Expended
FROM [BFS_DM].[Source].[Cld_Ess_SpendPln] where ([acct_20010] is not null and [acct_20010] <> '#missing')) t
where TRY_CAST(t.[acct_20010] AS NUMERIC(18,4)) IS NULL
IМне просто нужно несколько советов о том, как я могу преобразовать значения научных обозначений (без использования Excel, поскольку это автоматизированный процесс) в числовые или десятичные числа.
Если бы я загрузил файл в таблицу с правильными типами данных - он бы даже принял научное записанное значение?