YetAnotherForum
სალამი სტუმარს ძებნა | აქტიური თემები | შესვლა | რეგისტრაცია

ფავორიტებში დამატება
როგორ ვიპოვოთ რაიმე რიცხვის ციფრების ჯამი
vajaGM Offline
#1 Posted : Saturday, October 30, 2010 1:33:23 AM

Rank: Administration

Medals:

Groups: Administrators
Joined: 10/20/2012
Posts: 106
Points: 327
Location: Tbilisi

Thanks: 0 times
Was thanked: 0 time(s) in 0 post(s)

ხანდახან საჭირო ხდება ვიპოვოთ რაიმე რიცხვის ციფრების ჯამი.
ამ ოპერაციის შესასრულებლად წარმოგიდგენთ მარტივ სკალარულ ფუნქციას.

BB კოდი:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_add_digits]
(
@in int
)
RETURNS int
AS
BEGIN
    DECLARE @out int
    SET @out = 0
    
    WHILE @in >= 10
    BEGIN
        SET @out = @out + (@in % 10)
        SET @in = @in / 10
    END
    RETURN @out + @in
END



ქუოტა (Quote):

-- შესრულების მაგალითი
SELECT [dbo].[fn_add_digits](1234) as result
-- რეზულტატი ტოლია 10-ის (1+2+3+4)



როგორც ხედავთ ფუნქცია მართლაც მარტივია და სკალარული ფუნქციის გამოყენებით ამის გაკეთება არც ისე რთულია.
საინტერესო იქნება იგივე ოპერაცია შევასრულოთ SELECT ბრძანების გამოყენებით, რის მაგალითსაც მოგიყვანთ ქვემოთ.


BB კოდი:
DECLARE @in int = 1234;
WITH ct([col_in]) AS (SELECT     @in AS [col_in]), ct1([col_out], [col_in]) AS
    (SELECT     0 AS [col_out], [col_in]
      FROM          ct
      UNION ALL
      SELECT     [col_out] + [col_in] % 10 AS [col_out], [col_in] / 10 AS [col_in]
      FROM         ct1
      WHERE     ([col_in] >= 1))
    SELECT     TOP (1) [col_out]
     FROM         ct1
     ORDER BY [col_out] DESC
ქუოტა (Quote):
Sponsor  
 
Apex ltd. http://www.apex.ge
Users browsing this topic
Guest
ფავორიტებში დამატება
Forum Jump  
თქვენ არ შეგიძლიათ დაწეროთ ახალი თემა ამ ფორუმში.
თქვენ არ შეგიძლიათ გასცეთ პასუხი, თემას, ამ ფორუმში .
თქვენ არ შეგიძლიათ წაშალოთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ ჩაასწოროთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ შექმნათ გამოკითხვა ამ ფორუმში.
თქვენ არ შეგიძლიათ ხმის მიცემა ამ ფოუმში.

YAFVision Theme by Jaben Cargman (Tiny Gecko)
Powered by YAF | YAF © 2003-2009, Yet Another Forum.NET
This page was generated in 0.062 seconds.