Преобразование VARCHAR в числовой кошмар - PullRequest
0 голосов
/ 09 мая 2019

Я хотел отдать это команде, потому что я в тупике. Любые предложения будут оценены.

Я загружаю таблицу с данными из другой таблицы, и в ходе этого процесса происходит изменение типа данных с VARCHAR на NUMERIC. Я получаю сообщение об ошибке: Ошибка преобразования типа данных varchar в числовой.

Эта ошибка обычно означает, что в этом столбце должно быть значение, которое просто не может быть преобразовано в NUM - Пример: ‘Y’. За исключением того, что в этом случае нет ничего, кроме числовых значений, хотя БД не думает, что они есть.

Я сузил проблемные столбцы, выполняя CAST по одному столбцу за раз. Что странно, я могу ЗАКРЫТЬ проблемные столбцы в FLOAT, а затем в NUMERIC. Это может быть решением, но я обеспокоен использованием FLOAT с валютой, я не думаю, что FLOAT округляет число с цифрой, если у вас есть несколько десятичных знаков. Однако я могу ошибаться, и вполне нормально использовать FLOAT.

Просто для теста я попробовал INT, когда я пытаюсь CAST AS INT, я получаю более конкретную ошибку. Ошибка преобразования при преобразовании значения varchar '1823.33' в тип данных int.

Поэтому, когда я запускаю следующий запрос, кажется, что все работает ...

SELECT     
  [Expended]
  ,CAST([Expended] AS FLOAT) AS Exp_FLOAT
  ,CAST(CAST([Expended] AS FLOAT) AS NUMERIC (18,4)) AS Exp_NUM
FROM [Stage].[BI_FACT_SPENDPLAN_C]
where [Expended] ='1823.33'
Expended      Exp_FLOAT     Exp_NUM
1823.33       1823.33       1823.3300
1823.33       1823.33       1823.3300
1823.33       1823.33       1823.3300
1823.33       1823.33       1823.3300
1823.33       1823.33       1823.3300

Полагаю, я спрашиваю: как вы думаете, мне следует CAST AS FLOAT, а затем CAST AS NUMERIC или в следующих 9 столбцах файла экспорта SPENDPLAN есть что-то существенное? Тогда возникает вопрос: если я «исправлю» эти столбцы с двойным CAST, может ли это произойти с другим столбцом и произойдет сбой при загрузке таблицы?

SELECT     
    [Expended]       
    ,[Obligated]     
    ,[Total_Expended]      
    ,[Total_Obligated_FAMIS] 
    ,[Spendplan_Balance] 
    ,[Pending_Expenditures] 
    ,[Unexpended_Balance]
    ,[Funds_Remaining_by_BBFY]
    ,[PY_Funds_Remaining]
FROM [Stage].[BI_FACT_SPENDPLAN_C]

1 Ответ

2 голосов
/ 09 мая 2019

Просто чтобы быть уверенным ...

Это прекрасно работает:

declare @expended varchar(100)='1823.33'
select convert(numeric,@expended)

Вы абсолютно уверены, что ваша проблема действительно связана с этой записью?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...