Sql Server использует Convert и Replace вместе в одном выражении - PullRequest
0 голосов
/ 23 января 2019

Я хотел дважды проверить мою логику для запроса в SQL Server.

Идея состоит в том, что я могу передать следующие значения, и он будет гарантировать, что результат будет десятичным с четырьмя конечными цифрами.

Возможные значения для @LABORQTY:

1,200

1,200.42

1200 (Integer)

1200.42

1200 (As a String)

1200.42 (As a String)

Если значение является строкой, оно выдаст ошибку: Error converting data type nvarchar to numeric.

Вот мой код:

CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', ''))

Вывод каждый раз, хотя должен быть десятичным: 1200.4200

Ответы [ 2 ]

0 голосов
/ 23 января 2019

вы можете использовать:

select CAST ( REPLACE( '1,200.4' , ',','') AS decimal(17,4))
0 голосов
/ 23 января 2019

Ваш вопрос действительно запутан, но я отвечу по следующим параметрам:

@ labourqty - это VARCHAR

@ labourqty может так или иначе содержать любое из следующих значений:

'1200'
'1200.42'
'1,200'
'1,200.42'

В этом случае CONVERT(DECIMAL(12, 4), REPLACE(@LABORQTY, ',', '')) действительно выдаст десятичное число с точностью до 4 цифр дробной точности. Будет ли ваш инструмент запросов / язык программирования выводить его как 1200.4200 или нет - это совсем другой вопрос; вполне может просто вывести 1200.42 и сбросить конечные нули

Если вы все еще получаете Error converting data type varchar to numeric., в числовой строке есть некоторые другие символьные данные (не запятая)

Если вам определенно нужны конечные нули, отформатируйте их в строку перед выводом

FORMAT(CONVERT(decimal(12,4), '1200.42'), '0.0000')

Будет сгенерирована строка с 4 концевыми нулями

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