Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 В чем отличие?  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
declare @t table (a char)
insert into @t select '-' union select '.' union select '/'

declare @s varchar(255)
set @s = '086-1/12'
select @s = replace(@s, a, '') from @t

select @s
Результат 086112

ALTER FUNCTION [dbo].[fn_SeriesToInt]
	(@series varchar(255))
RETURNS int AS
BEGIN
	declare @resultStr varchar(255)
	declare @result int

	declare @t table (a char)
	insert into @t select '-' union select '.' union select '/'

	select @resultStr = replace(@series, a, '') from @t

	set @result = convert(integer, @resultStr)
	RETURN @result
END

При попытке сделать
select *, dbo.fn_SeriesToInt(series_description) from Listing
получаю
Conversion failed when converting the varchar value '086-1' to data type int.

При этом если внутри функции вместо
insert into @t select '-' union select '.' union select '/'
написать
insert into @t select '-'
то запрос отрабатывает нормально.

Что я делаю не так?
21 дек 09, 15:54    [8096527]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вы думаете, что select @resultStr = replace(@series, a, '') from @t вам рекурсивно заменит все символы в переменной ?
21 дек 09, 15:57    [8096557]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
declare @s varchar(255)
set @s = '086-1/12/-//00/-'
select @s = replace(@s, a, '') from @t
08611200
меняет ведь...
21 дек 09, 16:01    [8096590]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Найдите три отличия

select @s = replace(@s, a, '') from @t
select @resultStr = replace(@series, a, '') from @t
21 дек 09, 16:02    [8096598]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
ппц.
Glory, пасибо
21 дек 09, 16:03    [8096612]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Проходимец,

если писать
select @s = replace(@s, a, '') from @t
, то сервер обрабатывает последовательно все записи табличной переменной,
потому что и слева от "=", и справа от "=" стоит одна и та же переменная @s.
А в функции Вы пишете
select @resultStr = replace(@series, a, '') from @t
Найдите два отличия!
Это присвоение выполняется один раз.
21 дек 09, 16:03    [8096618]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Проходимец
Member

Откуда: Москва
Сообщений: 571
Зрение не то уже :)
21 дек 09, 16:04    [8096629]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Проходимец
declare @s varchar(255)
set @s = '086-1/12/-//00/-'
select @s = replace(@s, a, '') from @t
08611200
меняет ведь...


автор

select @resultStr = replace(@series, a, '') from @t

найдите 1 маленькое, но очень гордое отличие;)
21 дек 09, 16:04    [8096630]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, возможно, у Вас это не единственная задача подобного рода,
в таком случае Вам будет полезно иметь в БД свою функцию, подобную TRANSLATE
Имхо, конечно
21 дек 09, 16:10    [8096690]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Glory
Найдите три отличия
iap
Найдите два отличия!
iljy
найдите 1 маленькое, но очень гордое отличие

Сколько же там, всё-таки, отличий?
21 дек 09, 16:11    [8096702]     Ответить | Цитировать Сообщить модератору
 Re: В чем отличие?  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Glory
Найдите три отличия
iap
Найдите два отличия!
iljy
найдите 1 маленькое, но очень гордое отличие

Сколько же там, всё-таки, отличий?

Если по длине переменных - то три
Если по количеству переменных - то две
Если по логике - то одна ))
21 дек 09, 16:15    [8096741]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить