الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دالة تفقيط الارقام الي نص

بدأه محمد فؤاد تركي في 12 يونيو 2011 · 5 رد · 7,825 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الساده الزملاء

السلام عليكم ورحمة الله وبركاتة

اثناء بحثي علي الانترنت وجدت دالة لتحويل الارقام الي نصوص

والدالة تعمل بشكل سليم

مشكلتي هي انني اريد من الدالة ان تقوم بتحويل حقل معين

مثال

select dbo.Tafkeet(dbo.BANKCHEQUETABLE.AMOUNTCUR)

حيث أن AMOUNTCUR هو الحقل المخزن بداخلة الارقام المراد تحويلها الي نصوص

فعند تشغيل جملة الــ Select يظهر خطأ

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "dbo.BANKCHEQUETABLE.AMOUNTCUR" could not be bound.

كود استدعاء الدالة

Select dbo.Tafkeet(9875)

CREATE FUNCTION dbo.Tafkeet (@TheNo  numeric(18,3))
returns varchar(1000) as
begin
if @TheNo <= 0   return 'zero'
declare @TheNoAfterReplicate varchar(15)
set @TheNoAfterReplicate = right(replicate('0',15)+cast(floor(@TheNo) as varchar(15)),15)
declare @ComWithWord varchar(1000),@TheNoWithDecimal as varchar(400),@ThreeWords as int
set @ThreeWords=0
set @ComWithWord  = ' فقط '
declare   @Tafket TABLE (num int,  NoName varchar(100)) 
INSERT INTO @Tafket VALUES (0,'') 
INSERT INTO @Tafket VALUES (1,'واحد')
INSERT INTO @Tafket VALUES (2,'اثنان')
INSERT INTO @Tafket VALUES (3,'ثلاثة')
INSERT INTO @Tafket VALUES (4,'اربعة')
INSERT INTO @Tafket VALUES (5,'خمسة')
INSERT INTO @Tafket VALUES (6,'ستة')
INSERT INTO @Tafket VALUES (7,'سبعة')
INSERT INTO @Tafket VALUES (8,'ثمانية')
INSERT INTO @Tafket VALUES (9,'تسعة')
INSERT INTO @Tafket VALUES (10,'عشرة')
INSERT INTO @Tafket VALUES (11,'احدى عشر')
INSERT INTO @Tafket VALUES (12,'اثنى عشر')
INSERT INTO @Tafket VALUES (13,'ثلاثة عشر')
INSERT INTO @Tafket VALUES (14,'اربعة عشر')
INSERT INTO @Tafket VALUES (15,'خمسة عشر')
INSERT INTO @Tafket VALUES (16,'ستة عشر')
INSERT INTO @Tafket VALUES (17,'سبعة عشر')
INSERT INTO @Tafket VALUES (18,'ثمانية عشر')
INSERT INTO @Tafket VALUES (19,'تسعة عشر')
INSERT INTO @Tafket VALUES (20,'عشرون')
INSERT INTO @Tafket VALUES (30,'ثلاثون')
INSERT INTO @Tafket VALUES (40,'اربعون')
INSERT INTO @Tafket VALUES (50,'خمسون')
INSERT INTO @Tafket VALUES (60,'ستون')
INSERT INTO @Tafket VALUES (70,'سبعون')
INSERT INTO @Tafket VALUES (80,'ثمانون')
INSERT INTO @Tafket VALUES (90,'تسعون')
INSERT INTO @Tafket VALUES (100,'مائة')
INSERT INTO @Tafket VALUES (200,'مائتان')
INSERT INTO @Tafket VALUES (300,'ثلاثمائة')
INSERT INTO @Tafket VALUES (400,'أربعمائة')
INSERT INTO @Tafket VALUES (500,'خمسمائة')
INSERT INTO @Tafket VALUES (600,'ستمائة')
INSERT INTO @Tafket VALUES (700,'سبعمائة')
INSERT INTO @Tafket VALUES (800,'ثمانمائة')
INSERT INTO @Tafket VALUES (900,'تسعمائة')
INSERT INTO @Tafket  SELECT FirstN.num+LasteN.num,LasteN.NoName+' و '+FirstN.NoName
FROM (SELECT * FROM @Tafket WHERE num BETWEEN 20 AND 90) FirstN CROSS JOIN (SELECT * FROM @Tafket WHERE num BETWEEN 1 AND 9) LasteN
INSERT INTO @Tafket  SELECT FirstN.num+LasteN.num,FirstN.NoName+' و '+LasteN.NoName
FROM (SELECT * FROM @Tafket WHERE num BETWEEN 100 AND 900) FirstN CROSS JOIN (SELECT * FROM @Tafket WHERE num BETWEEN 1 AND 99) LasteN
if left(@TheNoAfterReplicate,3) > 0
    set @ComWithWord = @ComWithWord + ISNULL((select NoName  from  @Tafket where num=left(@TheNoAfterReplicate,3)),'')+  ' ترليون'
if left(right(@TheNoAfterReplicate,12),3) > 0 and  left(@TheNoAfterReplicate,3) > 0
    set @ComWithWord=@ComWithWord+ ' و '
if left(right(@TheNoAfterReplicate,12),3) > 0
    set @ComWithWord = @ComWithWord +ISNULL((select NoName from @Tafket where num=left(right(@TheNoAfterReplicate,12),3)),'') +  ' بليون'
if left(right(@TheNoAfterReplicate,9),3) > 0
begin
    set @ComWithWord=@ComWithWord + case  when @TheNo>999000000  then ' و'  else '' end
set @ThreeWords=left(right(@TheNoAfterReplicate,9),3)
       set @ComWithWord = @ComWithWord + ISNULL((select case when   @ThreeWords>2 then NoName end  from @Tafket  where num=left(right(@TheNoAfterReplicate,9),3)),'')  + case when  @ThreeWords=2 then ' مليونان' when   @ThreeWords between 3 and 10 then ' ملايين' else ' مليون' end
end
if left(right(@TheNoAfterReplicate,6),3) > 0
begin
    set @ComWithWord=@ComWithWord + case  when @TheNo>999000  then ' و'  else '' end
    set @ThreeWords=left(right(@TheNoAfterReplicate,6),3)
    set @ComWithWord = @ComWithWord + ISNULL((select case when  @ThreeWords>2 then NoName  end from @Tafket where num=left(right(@TheNoAfterReplicate,6),3)),'')+ case when  @ThreeWords=2 then ' الفان' when @ThreeWords between 3 and 10 then ' الاف'  else ' الف' end
end

  if right(@TheNoAfterReplicate,3) > 0
  begin
    if @TheNo>999
begin
    set @ComWithWord=@ComWithWord + ' و'
end

    set @ThreeWords=right(@TheNoAfterReplicate,2)
if @ThreeWords=0
begin
--   set @ComWithWord=@ComWithWord + ' و'
   set @ComWithWord = @ComWithWord + ISNULL((select NoName  from @Tafket where @ThreeWords=0 AND num=right(@TheNoAfterReplicate,3)),'')
end

end

set @ThreeWords=right(@TheNoAfterReplicate,2)
set @ComWithWord =  @ComWithWord  +   ISNULL((select  NoName  from @Tafket where @ThreeWords>2 AND num=right(@TheNoAfterReplicate,3)),'') 
set @ComWithWord = @ComWithWord +' '+ case when  @ThreeWords=2 then ' ديناران' when @ThreeWords between 3 and 10 then ' دنانير'  else ' دينارا' end
if right(rtrim(@ComWithWord),1)=',' set @ComWithWord = substring(@ComWithWord,1,len(@ComWithWord)-1)
if  right(@TheNo,len(@TheNo)-charindex('.',@TheNo)) >0 and charindex('.',@TheNo)<>0
    begin
        set @ThreeWords=left(right(round(@TheNo,3),3),3)
        SELECT @TheNoWithDecimal=  ' و' + ISNULL((SELECT NoName from @Tafket where num=left(right(round(@TheNo,3),3),3)  AND @ThreeWords >3),'')
        set @TheNoWithDecimal = @TheNoWithDecimal+  case when  @ThreeWords=2 then ' فلسان' when @ThreeWords between 3 and 10 then ' فلسات'  else '  فلس' end
set @ComWithWord = @ComWithWord + @TheNoWithDecimal
END
set @ComWithWord = @ComWithWord + ' اردني لا غير'
return  rtrim(@ComWithWord)
end

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

السلام عليكم.

من رسالة الخطأ يبدو أن المشكلة في تعليمة Select التي تكتبها.

يرجى وضع كامل التعليمة حتى تتوضح المشكلة أكثر.

#3

فعلا المشكلة كانت في تعليمة Select

المشكلة اتحلت والحمد لله

والكود موجود اعلاه لمن يريد ان يستفيد منه لتفقيط الارقام الي حروف

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 12 يونيو 2011 في 14:12

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#4

الكود لا يعمل

جرب 1750

لن يعطي الالوف

"كل ما هو جديد ومميز ومفيد وغريب ولطيف "

مدونتي

#5

اهلن فيك اخي

بما انك خبير في الاكسس

كيف اضيف واعمل على هذه الداله في الاكسس ولك جزيل الشكر

#6
CREATE FUNCTION [dbo].[DI_Tafquet] (@TheNo  numeric(18,3)) 
returns varchar(1000) as
 
begin 
if @TheNo <= 0   return 'zero'
 
declare @TheNoAfterReplicate varchar(15) 
set @TheNoAfterReplicate = right(replicate('0',15)+cast(floor(@TheNo) as varchar(15)),15) 
declare @ComWithWord varchar(1000),@TheNoWithDecimal as varchar(400),@ThreeWords as int 
set @ThreeWords=0 
set @ComWithWord  = ' فقط ' 
declare   @Tafquet TABLE (num int,  NoName varchar(100)) 
INSERT INTO @Tafquet VALUES (0,'')  
INSERT INTO @Tafquet VALUES (1,'واحد') 
INSERT INTO @Tafquet VALUES (2,'اثنان') 
INSERT INTO @Tafquet VALUES (3,'ثلاثة') 
INSERT INTO @Tafquet VALUES (4,'اربعة') 
INSERT INTO @Tafquet VALUES (5,'خمسة') 
INSERT INTO @Tafquet VALUES (6,'ستة') 
INSERT INTO @Tafquet VALUES (7,'سبعة') 
INSERT INTO @Tafquet VALUES (8,'ثمانية') 
INSERT INTO @Tafquet VALUES (9,'تسعة') 
INSERT INTO @Tafquet VALUES (10,'عشرة') 
INSERT INTO @Tafquet VALUES (11,'احدى عشر') 
INSERT INTO @Tafquet VALUES (12,'اثنى عشر') 
INSERT INTO @Tafquet VALUES (13,'ثلاثة عشر') 
INSERT INTO @Tafquet VALUES (14,'اربعة عشر') 
INSERT INTO @Tafquet VALUES (15,'خمسة عشر') 
INSERT INTO @Tafquet VALUES (16,'ستة عشر') 
INSERT INTO @Tafquet VALUES (17,'سبعة عشر') 
INSERT INTO @Tafquet VALUES (18,'ثمانية عشر') 
INSERT INTO @Tafquet VALUES (19,'تسعة عشر') 
INSERT INTO @Tafquet VALUES (20,'عشرون') 
INSERT INTO @Tafquet VALUES (30,'ثلاثون') 
INSERT INTO @Tafquet VALUES (40,'اربعون') 
INSERT INTO @Tafquet VALUES (50,'خمسون') 
INSERT INTO @Tafquet VALUES (60,'ستون') 
INSERT INTO @Tafquet VALUES (70,'سبعون') 
INSERT INTO @Tafquet VALUES (80,'ثمانون') 
INSERT INTO @Tafquet VALUES (90,'تسعون') 
INSERT INTO @Tafquet VALUES (100,'مائة') 
INSERT INTO @Tafquet VALUES (200,'مائتان') 
INSERT INTO @Tafquet VALUES (300,'ثلاثمائة') 
INSERT INTO @Tafquet VALUES (400,'أربعمائة') 
INSERT INTO @Tafquet VALUES (500,'خمسمائة') 
INSERT INTO @Tafquet VALUES (600,'ستمائة') 
INSERT INTO @Tafquet VALUES (700,'سبعمائة') 
INSERT INTO @Tafquet VALUES (800,'ثمانمائة') 
INSERT INTO @Tafquet VALUES (900,'تسعمائة') 
INSERT INTO @Tafquet  
SELECT FirstN.num+LasteN.num,LasteN.NoName+' و '+FirstN.NoName FROM 
(SELECT * FROM @Tafquet WHERE num >= 20 AND num <= 90) FirstN 
CROSS JOIN 
(SELECT * FROM @Tafquet WHERE num >= 1 AND num <= 9) LasteN
 
INSERT INTO @Tafquet  
SELECT FirstN.num+LasteN.num,FirstN.NoName+' و '+LasteN.NoName FROM (SELECT * FROM @Tafquet WHERE num >= 100 AND num <= 900) FirstN 
CROSS JOIN 
(SELECT * FROM @Tafquet WHERE num >= 1 AND num <= 99) LasteN
 
 
if left(@TheNoAfterReplicate,3) > 0 
set @ComWithWord = @ComWithWord + ISNULL((select NoName  from  @Tafquet where num=left(@TheNoAfterReplicate,3)),'')+  ' ترليون' 
if left(right(@TheNoAfterReplicate,12),3) > 0 and  left(@TheNoAfterReplicate,3) > 0 
set @ComWithWord=@ComWithWord+ ' و ' 
if left(right(@TheNoAfterReplicate,12),3) > 0 
set @ComWithWord = @ComWithWord +ISNULL((select NoName from @Tafquet where num=left(right(@TheNoAfterReplicate,12),3)),'') +  ' بليون' 
if left(right(@TheNoAfterReplicate,9),3) > 0
 
begin 
set @ComWithWord=@ComWithWord + case  when @TheNo>999000000  then ' و'  else '' end 
set @ThreeWords=left(right(@TheNoAfterReplicate,9),3)
set @ComWithWord = @ComWithWord + ISNULL((select case when   @ThreeWords>2 then NoName end  from @Tafquet  where num=left(right(@TheNoAfterReplicate,9),3)),'')  + case when  @ThreeWords=2 then ' مليونان' when   @ThreeWords between 3 and 10 then ' ملايين' else ' مليون' end 
end
 
if left(right(@TheNoAfterReplicate,6),3) > 0 
begin 
set @ComWithWord=@ComWithWord + case  when @TheNo>999000  then ' و'  else '' end 
set @ThreeWords=left(right(@TheNoAfterReplicate,6),3)
set @ComWithWord = @ComWithWord + ISNULL((select case when  @ThreeWords>2 then NoName  end from @Tafquet where num=left(right(@TheNoAfterReplicate,6),3)),'')+ case when  @ThreeWords=2 then ' الفان' when @ThreeWords between 3 and 10 then ' الاف'  else ' الف' end 
end
 
if right(@TheNoAfterReplicate,3) > 0 
begin
 
if @TheNo>999 
begin 
set @ComWithWord=@ComWithWord + ' و' 
end
 
if right(@TheNoAfterReplicate, 2) = '01' or right(@TheNoAfterReplicate, 2) = '02' 
begin 
--set @ComWithWord=@ComWithWord + case  when @TheNo>1000  then ' و'  else '' end 
--set @ThreeWords=left(right(@TheNoAfterReplicate,6),3)
set @ComWithWord = @ComWithWord + ' ' + ISNULL((select noname from @Tafquet where num=right(@TheNoAfterReplicate, 3)),'')
end
 
set @ThreeWords=right(@TheNoAfterReplicate,2)
 
if @ThreeWords=0 
begin 
--   set @ComWithWord=@ComWithWord + ' و' 
   set @ComWithWord = @ComWithWord + ISNULL((select NoName  from @Tafquet where @ThreeWords=0 AND num=right(@TheNoAfterReplicate,3)),'') 
end
 
end
 
set @ThreeWords=right(@TheNoAfterReplicate,2) 
set @ComWithWord =  @ComWithWord  +   ISNULL((select  NoName  from @Tafquet where @ThreeWords>2 AND num=right(@TheNoAfterReplicate,3)),'') 
set @ComWithWord = @ComWithWord +' '+ case when  @ThreeWords=2 then ' جنيهان' when @ThreeWords between 3 and 10 then ' جنيهات'  else ' جنيه' end 
if right(rtrim(@ComWithWord),1)=',' set @ComWithWord = substring(@ComWithWord,1,len(@ComWithWord)-1) 
if  right(@TheNo,len(@TheNo)-charindex('.',@TheNo)) >0 and charindex('.',@TheNo)<>0 
    begin 
        set @ThreeWords=left(right(round(@TheNo,3),3),3) 
        SELECT @TheNoWithDecimal=  ' و' + ISNULL((SELECT NoName from @Tafquet where num=left(right(round(@TheNo,3),3),3)  AND @ThreeWords >3),'') 
        set @TheNoWithDecimal = @TheNoWithDecimal+  case when  @ThreeWords=2 then ' قرشان' when @ThreeWords between 3 and 10 then ' قروش'  else '  قرش' end 
set @ComWithWord = @ComWithWord + ' و '+ CONVERT(varchar(max),@ThreeWords)+ case when  @ThreeWords=2 then ' قرشان' when @ThreeWords between 3 and 10 then ' قروش'  else '  قرش' end --@TheNoWithDecimal 
END 
set @ComWithWord = @ComWithWord + ' لا غير '
 
return rtrim(@ComWithWord) 
end
 
 
GO

 

Tafquet.SQL

مواضيع مشابهة