powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / хранимая процедура
6 сообщений из 6, страница 1 из 1
хранимая процедура
    #32027876
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
У меня в процедуре есть входной параметр @a int. Нужно получить переменную @s char(6) по следующему условию: если, например @a=12, то @s=000012 и т.д. Как это реализовать на сервере? Заранее благодарю.
...
Рейтинг: 0 / 0
хранимая процедура
    #32027884
Варяг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотел быстренько ответить:
set @s=right('000000'+ltrim(cast(@a as char(6))),6)
потом решил попробовать !
select right('0004321',2)
select right('0004321',5)
select right('0004321',9)

ОК !
Далее
select '000000'+cast(12 as char(6))
select right('000000'+cast(12 as char(6)),6)
select right('000000'+cast(12 as char(6)),7)
select right('000000'+cast(12 as char(6)),
select right('000000'+cast(12 as char(6)),9)

и глаза на лоб! Что же это за второй параметр !?
а соответственно чудеса в
declare @a int,@s char(6)
set @a=12
select '000000'+cast(@a as char(6))
select right('000000'+cast(@a as char(6)),6)
select right('000000'+cast(@a as char(6)),7)

Так что не ответил
!
...
Рейтинг: 0 / 0
хранимая процедура
    #32027885
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
set @s = right('000000'+cast(@a as varchar), 6 )
...
Рейтинг: 0 / 0
хранимая процедура
    #32027965
Варяг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Glory
Замечательно ! Все строчки отрабатывают правильно!
Не могли бы Вы поделиться, в чем же все-таки дело, ведь с точки зрения других языков все должно работать идентично.
А кстати, может еще где-то такие подарочки укрыты ?
...
Рейтинг: 0 / 0
хранимая процедура
    #32027967
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего хитрого здесь нет

Дело в том, что при преобразованиие в char(6) происходит дополнение строки до заданной длины пробелами, причем пробелы добавляются справа.
Т.е. cast(12 as char(6)) дает результат '12 ' (4 пробела). Понятно что right(@a, 6) берет первые 6 символов справа, включая пробелы.

А cast(12 as varchar) дает строку без дополнительных пробелов

Но для этого собственно и были "придуманы" такие типы данных.
...
Рейтинг: 0 / 0
хранимая процедура
    #32027973
Варяг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мы это тоже обнаружили уже. Так что ответ
set @s=right('000000'+Rtrim(cast(@a as char(6))),6)
Просто привык, что обычно преобраз числа к строке выполняется с правым выравниванием
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / хранимая процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]