Используя Cast on Left Join, чтобы изменить VARCHAR на DECIMAL - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно присоединить таблицу с помощью пользовательского столбца (UDF1), который содержит текстовые данные и номера счетов, к другой таблице по номерам счетов (LDACCT).Номера счетов должны быть отформатированы как десятичные (16,0), но в столбце UDF1 есть текстовые данные (а также номера счетов), потому что UDF1 также используется для целей, отличных от размещения номеров счетов (не мой дизайн).Мое текущее объединение не работает:

left outer join dbo.tbl_Loan_Legal_Descriptions as ll2
   on  CAST(uf.UDF1 as decimal(16, 0)) = ll2.LDACCT

Я получаю ужас: Error converting data type varchar to numeric, и я не могу изменить объединение, чтобы устранить ошибку.Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Пожалуйста, измените "на" часть как:

on CAST(uf.UDF1 as varchar(255)) = cast(ll2.LDACCT as varchar(255))
0 голосов
/ 24 октября 2018

Возможно, в одной из ваших строк в uf есть что-то, что не может быть приведено к decimal.Попробуйте

select
    *
  from uf
 where left(uf.UDF1,1) not in ('0','1','2','3','4','5','6','7','8','9')

В зависимости от того, хотите ли вы игнорировать эту строку, вы можете либо попытаться исключить эту строку по другим критериям, либо вы можете перевернуть объединение, приведя другую сторону к строке:

...
left outer join dbo.tbl_Loan_Legal_Descriptions as ll2
   on  uf.UDF1 = cast(varchar,ll2.LDACCT)

Если вы попробуете это, вам может понадобиться убрать начальные нули с uf.UDF1, но, поскольку вы не показали нам какие-либо репрезентативные данные из таблиц, все, что мы можем здесь сделать, это просто угадать или предостеречь об этом.

...