私はSQL関数の総数です。これはこのトピックについて多くのことを検索した後の私の最初の質問です。sql server varchar(4)に合うように> 5のvarchar文字列を縮小します。
私はvarchar(8)である値のリストを選択して、それらをvarchar(4)に変換しようとしています これを行うには、3番目の位置で値を切り捨て、 9から1は、その後、例えばPATOL、PATOLB 1
から再起動し、PATOLCは、PAT3 PAT2 PAT1なるはずので
に私は、ウェブ上で私が適応しようとしているコードの一部を見つけましたしかし、私はカウンターの増分で問題を抱えています
間違いや非エレガントそれは正しく、彼らが< = 4文字の長さであれば値がそのまま返す
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
、そして正しく長く切り捨て:フォームは、これはここで私の関数の80の
の私のコモドール64 BASIC以来、コーディングの私の最初の試みであります値は3文字になりますが、1から9までのサイクリングではなく、常に同じ文字が付加されます。
できますか? はあなたに答えを
EDIT(2016年10月12日) 感謝をありがとう。一方、私は次のことを試してみた コメントが、何も行わないために:それは常に追加charとして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にする必要がありますか?以前の文字列に何が追加されたかについての知識はありませんか? –