Я полный новичок в SQL-функциях, это мой первый вопрос после многого по этому вопросу.sql server shrink a> 5 varchar string для установки varchar (4)
Я пытаюсь выбрать список значений, которые являются varchar (8), и преобразовать их в varchar (4) Для этого мне нужно будет усечь значение в третьей позиции и добавить символ, который варьируется от 1 до 9, а затем возобновляется с 1
например PATOL, PATOLB, PATOLC должен стать pat1, pat2, PAT3 и так далее
Я нашел в Интернете кусок кода, который я пытаюсь адаптировать , но у меня проблемы с приращением счетчика
, пожалуйста, будьте терпеливы за ошибки, а за неиспользованные форма, это моя первая попытка кодирования, так как мой Commodore 64 BASIC в 80-х
вот моя функция:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER function [dbo].[f_To4char] (@value varchar(10))
RETURNS varchar(4)
AS
BEGIN
DECLARE @seq varchar(9)
DECLARE @digit char (1)
DECLARE @3car varchar(3)
DECLARE @result varchar(4)
DECLARE @count int
SET @seq = '123456789'
SET @count = 1
IF len(@value)<=4
return @value
else
BEGIN
WHILE (@count <=9)
BEGIN
SET @digit = SUBSTRING(@seq,@count,1)
SET @count = @count+1
SET @3car = substring (@value,1,3)
SET @result = @[email protected]
END
END
RETURN @result
END
Это правильно возвращаемые значения нетронутыми, если они длинные < = 4 символов, и правильно обрезает больше значения до 3 символов, но всегда добавляет один и тот же символ вместо циклического перехода от 1 до 9.
Можете ли вы помочь мне заставить его работать? Спасибо
EDIT (2016-10-12) Спасибо за ответ и комментарии Между тем я уже пробовал следующее, но ничего не делать: она всегда возвращает 1, прилагаемого полукокс
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[f_To4char](@value VARCHAR(10))
RETURNS varchar(4)
AS
BEGIN
DECLARE @digit char(1);
DECLARE @count smallint;
DECLARE @3car VARCHAR(3);
DECLARE @shrunk varchar(4);
DECLARE @result VARCHAR(4);
set @count=1 ;
IF LEN(@value) <= 4
RETURN @value;
ELSE
BEGIN
begin
if @count=1
set @digit = '1';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=2
set @digit = '2';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=3
set @digit = '3';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=4
set @digit = '4';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=5
set @digit = '5';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=6
set @digit = '6';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=6
set @digit = '6';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=7
set @digit = '7';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=8
set @digit = '8';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
begin
if @count=9
set @digit = '9';
SET @3car = SUBSTRING(@value, 1, 3);
SET @shrunk = @3car + @digit;
set @[email protected]+1
RETURN @shrunk;
end
if @count=10 set @count=1
END;
return @shrunk
END;
Каким образом он должен проходить цикл 1 - 9? Он не знает, что было добавлено к предыдущим строкам? –