Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 переназначение содержимого переменной с сохранением предыдущего значения  [new]
простоинтересующийся
Guest
тестовое задание, сделать пользовательскую функцию, которая формирует строку из дату с разделителями, которые передаются в качестве аргументов:'*', '++','%' и так далее.
Набросал, но при set @ret=@ret+... присвоения не происходит, что делаю не так?
create function uf_DateToStr (
                              @var1 datetime,
                              @chSplit char(1)
                             ) 
							  returns char(10)
as 
	begin
		declare
			@DD int,
			@MM int,
			@ret char(10)
			
		Set @DD=DAY(@var1)
		Set @MM = MONTH(@var1)
		
		if @DD<10
			begin
				Set @ret='0'+CAST(@DD as CHAR(1))
			end
		else
			begin
				Set @ret=CAST(@DD as CHAR(2))
			end	
		if @MM<10
			begin
				set @ret=@ret+'0'+@chSplit+CAST(@MM as CHAR(1))
			end
		else
			begin
				Set @ret=@ret+@chSplit+CAST(@MM as CHAR(2))
			end
		set @ret=@chSplit+CAST(YEAR(@var1) AS CHAR(4)) 
		return @ret 
	end
8 июл 13, 12:14    [14535099]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
_djХомяГ
Guest
declare 
@d datetime 
select @d='20130708'
select replace(convert(varchar(10),@d,104),'.','ZZZZ')
8 июл 13, 12:21    [14535140]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
простоинтересующийся
Guest
_djХомяГ
declare 
@d datetime 
select @d='20130708'
select replace(convert(varchar(10),@d,104),'.','ZZZZ')

Мне нужна не функция, мне нужно объяснение почему не происходит переинициализация переменной при конкатенации.
8 июл 13, 12:23    [14535149]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
_djХомяГ
Guest
Не хочется читать неоправдано длинный код - да и параметры непонятно какие передаются
А протрейсить не судьба ?
8 июл 13, 12:27    [14535159]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
простоинтересующийся
тестовое задание, сделать пользовательскую функцию, которая формирует строку из дату с разделителями, которые передаются в качестве аргументов:'*', '++','%' и так далее.
Набросал, но при set @ret=@ret+... присвоения не происходит, что делаю не так?
create function uf_DateToStr (
                              @var1 datetime,
                              @chSplit char(1)
                             ) 
							  returns char(10)
as 
	begin
		declare
			@DD int,
			@MM int,
			@ret char(10)
			
		Set @DD=DAY(@var1)
		Set @MM = MONTH(@var1)
		
		if @DD<10
			begin
				Set @ret='0'+CAST(@DD as CHAR(1))
			end
		else
			begin
				Set @ret=CAST(@DD as CHAR(2))
			end	
		if @MM<10
			begin
				set @ret=@ret+'0'+@chSplit+CAST(@MM as CHAR(1))
			end
		else
			begin
				Set @ret=@ret+@chSplit+CAST(@MM as CHAR(2))
			end
		set @ret=@chSplit+CAST(YEAR(@var1) AS CHAR(4)) 
		return @ret 
	end
В выделенной строке разве не хоронятся все предыдущие результаты вычисления?
8 июл 13, 12:27    [14535160]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
set @ret+=@chSplit+CAST(YEAR(@var1) AS CHAR(4));
8 июл 13, 12:28    [14535167]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1576
простоинтересующийся,

подумайте над вот этим
@ret char(10)
затем налд вот этим
Set @ret='0'+CAST(@DD as CHAR(1))
и дайте ответ на вопрос: чему будет равен @ret с точностью до символа, особенно количество символов.
мне нужно объяснение почему не происходит переинициализация переменной при конкатенации.
О какой переиницилизации речь? С какого перепугу ей тут быть? Просто конкатенацию вижу, необходимость переинициализации не вижу.
8 июл 13, 12:35    [14535196]     Ответить | Цитировать Сообщить модератору
 Re: переназначение содержимого переменной с сохранением предыдущего значения  [new]
простоинтересующийся
Guest
Sergey Sizov
простоинтересующийся,

подумайте над вот этим
@ret char(10)
затем налд вот этим
Set @ret='0'+CAST(@DD as CHAR(1))
и дайте ответ на вопрос: чему будет равен @ret с точностью до символа, особенно количество символов.
мне нужно объяснение почему не происходит переинициализация переменной при конкатенации.
О какой переиницилизации речь? С какого перепугу ей тут быть? Просто конкатенацию вижу, необходимость переинициализации не вижу.

все понятно, это и было сутью вопроса, типы данных и размеры. :) Спасибо всем!
8 июл 13, 12:41    [14535224]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить