SELECT
A.SETMOD, B.DESCRP
FROM
PMS.PSBSTTBL A
JOIN
PMS.PR029TBL B ON A.SETMOD = B.PAYMOD
Paymod
имеет тип данных VARCHAR
, SETMOD
типа decimal
Как решить ошибки преобразования типов данных VARCHAR в числовом
SELECT
A.SETMOD, B.DESCRP
FROM
PMS.PSBSTTBL A
JOIN
PMS.PR029TBL B ON A.SETMOD = B.PAYMOD
Paymod
имеет тип данных VARCHAR
, SETMOD
типа decimal
Как решить ошибки преобразования типов данных VARCHAR в числовом
Лучшая вещь, чтобы преобразовать десятичное в строку и сравнить его со значением строки .. внести необходимые коррективы в десятичной части .. :)
SELECT
A.SETMOD, B.DESCRP
FROM
PMS.PSBSTTBL A
JOIN
PMS.PR029TBL B ON CONVERT(VARCHAR(50),A.SETMOD) = B.PAYMOD
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()
.
SELECT
A.SETMOD, B.DESCRP
FROM
PMS.PSBSTTBL A
JOIN
PMS.PR029TBL B ON A.SETMOD =convert(decimal, B.PAYMOD)
[Как спросить ** хороший ** вопрос?] (http://stackoverflow.com/help/how-to-ask) –
THANKS MARC. Я ХОЧУ СДЕЛАТЬ ТИП ДАННЫХ В ЭТОМ ЗАЯВЛЕНИИ ЕГО САМОГО – Thiru
Является ли varchar columsn совместимым с десятичной? – artm