আমি মানগুলি থেকে লুপ করতে এবং মানগুলি থেকে একবারে 1 টি অক্ষর ফেলা এবং ফলাফলটি প্রদর্শন করতে চাই।
সুতরাং আমি যদি মান সহ একটি টেবিল থাকে:
ID
___
34679
13390
89906
আমি ফলাফলটি দেখতে চাই
Id
----
4679
679
79
9
3390
390
90
0
9906
906
06
6
আমি মানগুলি থেকে লুপ করতে এবং মানগুলি থেকে একবারে 1 টি অক্ষর ফেলা এবং ফলাফলটি প্রদর্শন করতে চাই।
সুতরাং আমি যদি মান সহ একটি টেবিল থাকে:
ID
___
34679
13390
89906
আমি ফলাফলটি দেখতে চাই
Id
----
4679
679
79
9
3390
390
90
0
9906
906
06
6
উত্তর:
দয়া করে এই জাতীয় জিনিসগুলির জন্য লুপগুলি ব্যবহার করবেন না (যেখানে হায়ারার্কির মতো জিনিসের উপর আপনার খুব কম নিয়ন্ত্রণ রয়েছে এমন পরিস্থিতিতেও আমি পুনরাবৃত্ত সিটিই সংরক্ষণ করব)। এসকিউএল এ লুপগুলি খারাপ; এসকিউএল সেটে কাজ করতে অনুকূলিত।
DECLARE @foo TABLE(ID INT);
INSERT @foo VALUES(34679),(13390),(89906);
;WITH x AS
(
SELECT TOP (2048) n = ROW_NUMBER() OVER (ORDER BY Number)
FROM master.dbo.spt_values ORDER BY Number
)
SELECT RIGHT(f.ID, x.n) FROM x
INNER JOIN @foo AS f
ON x.n < LEN(f.ID);
ফলাফল:
9
79
679
4679
0
90
390
3390
6
06
906
9906
declare @MyString varchar(500)
set MyString = '1,2.3#45.#,.6'
select dbo.RemoveChars(MyString, '#,.')
create function [dbo].[RemoveChars] (
@InputString varchar(MAX)
,@CharsToRemove varchar(500)
)
returns varchar(MAX)
as
begin
declare @len int
,@Counter int
,@OneChar char(1)
set @Counter = 1
set @len = LEN(@CharsToRemove);
while (1 = 1)
begin
set @OneChar = SUBSTRING(@CharsToRemove, @Counter, 1)
set @InputString = REPLACE(@InputString, @OneChar, '')
set @Counter = @Counter + 1
if (
@Counter > @len
or @Counter > 20
)
break;
end
return @InputString
end
CREATE PROC udploop (@num varchar(10))
AS
BEGIN
DECLARE @len int;
SET @len = LEN(@num);
WHILE (@len > 1)
BEGIN
SELECT
@num = RIGHT(@num, @len - 1);
PRINT @num;
SET @len = LEN(@num);
END
END
পাগলের সংখ্যা বাড়ছে:
EXEC udploop 34679
EXEC udploop 13390
EXEC udploop 89906
ফলাফল:
4679
679
79
9
3390
390
90
0
9906
906
06
6