একবারে 1 টি অক্ষর বাদ দিয়ে মানগুলির মধ্য দিয়ে লুপিং


10

আমি মানগুলি থেকে লুপ করতে এবং মানগুলি থেকে একবারে 1 টি অক্ষর ফেলা এবং ফলাফলটি প্রদর্শন করতে চাই।

সুতরাং আমি যদি মান সহ একটি টেবিল থাকে:

ID
___
34679
13390
89906

আমি ফলাফলটি দেখতে চাই

Id
----
4679
679
79
9
3390
390
90
0
9906
906
06
6

উত্তর:


19

দয়া করে এই জাতীয় জিনিসগুলির জন্য লুপগুলি ব্যবহার করবেন না (যেখানে হায়ারার্কির মতো জিনিসের উপর আপনার খুব কম নিয়ন্ত্রণ রয়েছে এমন পরিস্থিতিতেও আমি পুনরাবৃত্ত সিটিই সংরক্ষণ করব)। এসকিউএল এ লুপগুলি খারাপ; এসকিউএল সেটে কাজ করতে অনুকূলিত।

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

আপনার সহায়তার জন্য বরাদ্দ ধন্যবাদ এটিই আমি অর্জন করার চেষ্টা করছিলাম।
কাশিফ কুরেশি

-1
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

2
আপনার কোড কীভাবে কাজ করে সে সম্পর্কে আপনি কি কিছু ব্যাখ্যা সরবরাহ করতে পারেন? এটি ভবিষ্যতের দর্শকদের সহায়তা করবে।
কিন শাহ

-3
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

1
সুতরাং যখন আপনি টেবিলে অনেক সারি থাকবেন তখন আপনি কীভাবে এই প্রস্তাব করবেন? পদ্ধতিটি কল করুন - একটি লুপে - প্রতিটি সারিতে? এই সমস্ত মানগুলি টানতে আপনার এখন একটি প্রশ্নের প্রয়োজন এবং তারপরে প্রতিটিটির জন্য সঞ্চিত পদ্ধতিতে কল করার জন্য কোড তৈরি করুন। সুতরাং আপনার কাছে টেবিলের প্রতিটি সারিটির জন্য একটি লুপ রয়েছে যা এমন একটি প্রক্রিয়া কল করে যা নিজেই প্রতিটি মানের প্রতিটি অক্ষরের জন্য লুপ চালায়। এটি অবশ্যই এই সমস্যাটি সমাধানের কার্যকর উপায় নয়।
অ্যারন বার্ট্র্যান্ড

ধন্যবাদ। তবে আমি হারুনের সাথে একমত। এটা আমি চেয়েছিলাম না। আমার টেবিলের 300k এর বেশি মান রয়েছে। সুতরাং এটি কাজ করবে না।
কাশিফ কুরেশি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.