2015-11-04 2 views
1

Учитывая select ниже:Почему функция «замена» SQL Server создает нежелательные пробелы?

select convert(varchar, convert(money, 15.2), 1) 

В результате выход:

------------------------------ 
15.20 

(1 row(s) affected) 

Если я использую replace функцию:

select replace(convert(varchar, convert(money, 15.2), 1), '.', '|') 

Затем, результат:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
15|20 

(1 row(s) affected) 

Кто-нибудь знает, почему существует так много пробелов после использования функции replace?

Как я мог предотвратить (или исправить) это поведение?

+0

Что делает 'LEN (заменить (конвертировать (varchar, convert (money, 15.2), 1), '.', '|'))' Дать вам? –

+0

@RaduGheorghiu 5, но это не вопрос. Я генерирую файлы 'rpt' через' select', а моя предыдущая версия генерировала 1,6 ГБ данных, а текущий - 2,4 ГБ из-за нежелательных пробелов. – Buzinas

+0

Вы используете «Результаты для текста», попробуйте изменить режим на «Результаты на сетку» –

ответ

3

Он не добавляет никаких пробелов.

Единственная разница в том, что первая возвращает VARCHAR(30) второй VARCHAR(8000).

Приложение, которое вы используете, должно относиться к ним по-разному.

+0

Почему второй возвращает 'varchar (8000)', и почему он имеет только символы '256' вместо' 8000'? – Buzinas

+0

Btw, нет приложения, я только генерирую rpt-файл с помощью SQL Server Management Studio (опция «Результаты для файла»). – Buzinas

+0

Возвращаемым типом 'REPLACE' является' varchar (8000) 'при вызове не' MAX' 'varchar'. Оберните вторую в 'CAST AS VARCHAR (30)', если вы хотите, чтобы она обрабатывалась так же, как первая. SSMS - это приложение. –

Смежные вопросы