2016-08-31 3 views
-2
SELECT 
    A.SETMOD, B.DESCRP 
FROM 
    PMS.PSBSTTBL A 
JOIN 
    PMS.PR029TBL B ON A.SETMOD = B.PAYMOD 

Paymod имеет тип данных VARCHAR, SETMOD типа decimalКак решить ошибки преобразования типов данных VARCHAR в числовом

+1

[Как спросить ** хороший ** вопрос?] (http://stackoverflow.com/help/how-to-ask) –

+0

THANKS MARC. Я ХОЧУ СДЕЛАТЬ ТИП ДАННЫХ В ЭТОМ ЗАЯВЛЕНИИ ЕГО САМОГО – Thiru

+0

Является ли varchar columsn совместимым с десятичной? – artm

ответ

0

Лучшая вещь, чтобы преобразовать десятичное в строку и сравнить его со значением строки .. внести необходимые коррективы в десятичной части .. :)

SELECT 
    A.SETMOD, B.DESCRP 
FROM 
    PMS.PSBSTTBL A 
JOIN 
    PMS.PR029TBL B ON CONVERT(VARCHAR(50),A.SETMOD) = B.PAYMOD 
0

A join в две колонны различных типов действительно, очень плохая идея. Иногда, однако, другие люди разрабатывают системы баз данных, и у нас нет выбора.

У вас есть два варианта, в основном: конвертировать оба числа или оба в строки. Вы получаете ошибку, потому что в выражениях смешанного типа SQL Server преобразуется в более «ограничительный» тип (для упрощения логики). Таким образом, он преобразует строку в число.

В SQL Server 2012+, я хотел бы предложить try_convert() для преобразования в номер:

SELECT A.SETMOD, B.DESCRP 
FROM PMS.PSBSTTBL A JOIN 
    PMS.PR029TBL B 
    ON A.SETMOD = TRY_CONVERT(DECIMAL(?, ?), B.PAYMOD); 

?,? должен быть масштаб/точность SETMOD.

Конечно, вы могли бы также заставить преобразование в другом направлении:

SELECT A.SETMOD, B.DESCRP 
FROM PMS.PSBSTTBL A JOIN 
    PMS.PR029TBL B 
    ON CAST(A.SETMOD AS VARCHAR(255)) = B.PAYMOD; 

Это преобразование будет успешным, так что вам не нужно TRY_CONVERT().

0
SELECT 
A.SETMOD, B.DESCRP 
FROM 
PMS.PSBSTTBL A 
JOIN 
PMS.PR029TBL B ON A.SETMOD =convert(decimal, B.PAYMOD) 
Смежные вопросы