View Full Version : نمونه كدهاي T-SQL
myaffa
یک شنبه 09 مرداد 1390, 16:53 عصر
سلام خدمت همه دوستان يك سري كدهايي رو به زبان T-SQL نوشته ام گفتم بذارم اينجا تا همه ازش استفاده كنن
براي شروع گفتم بهتره كد بدست آووردن تعداد روزهاي گذشته از سال نسبت به يك تاريخ مشخص رو براتون بذارم
نكته ورودي اين تابع تاريخ به صورت ('900509') هستش يعني 09/05/1390كه نتيجش ميشه .... بهتره خودتون ببينيد :چشمک:
GO
/****** Object: UserDefinedFunction [dbo].[DateDiffer] Script Date: 07/31/2011 17:07:56 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
-- =============================================
-- Author: Kambiz Shahriary nasab
-- Create date: 25,july,2011
-- Description:
-- =============================================
ALTERFUNCTION [dbo].[DateDiffer]( @d nvarchar(6))
RETURNSint
AS
BEGIN
DECLARE @s int, @m int, @r int, @i int;
set @s=CAST(SUBSTRING(@d,1,2)asint)
set @m=CAST(SUBSTRING(@d,3,2)asint)
set @r=CAST(SUBSTRING(@d,5,2)asint)
set @i=1
while @i <=(@m -1)
begin
if(@i = 12)
Begin
set @r=@r+29
end
if((@i >=7)and(@i <12))
Begin
set @r=@r+30
end
if((@i >=1)and(@i <7))
Begin
set @r=@r+31
end
set @i = @i + 1
end
RETURN @r
END
myaffa
یک شنبه 09 مرداد 1390, 17:12 عصر
اين هم كد بدست آوردن اختلاف بين دو تاريخ به صورت ('900101','900508')
نكته : در اين تابع از تابع قبلي (DateDiffer) استفاده شده است
GO
/****** Object: UserDefinedFunction [dbo].[DiffDays] Script Date: 07/31/2011 17:23:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Kambiz Shahriary nasab
-- Create date: 25,july,2011
-- Description:
-- =============================================
ALTER FUNCTION [dbo].[DiffDays] (@d1 nvarchar(6) , @d2 nvarchar(6))
RETURNS int
AS
BEGIN
DECLARE @s1 int , @s2 int , @dd int ;
set @s1=CAST(SUBSTRING(@d1,1,2) as int)
set @s2=CAST(SUBSTRING(@d2,1,2) as int)
if(@s1=@s2)
begin
set @dd=dbo.DateDiffer(@d2)-dbo.DateDiffer(@d1)
end
if(@s1<@s2)
begin
set @dd=((365 * (@s2-@s1))- dbo.DateDiffer(@d1))+dbo.DateDiffer(@d2)
end
if(@s1>@s2)
begin
set @dd=(((365 * (@s2-@s1))- dbo.DateDiffer(@d2))+dbo.DateDiffer(@d1)) * -1
end
if(@dd<0)
begin
set @dd=0
end
RETURN @dd
END
myaffa
یک شنبه 09 مرداد 1390, 17:17 عصر
اين كد براي پيدا كردن تعداد روزهاي موجود در يك محدوده است
نكته: در اين تابع از توابع قبلي (DiffDays,DateDiffer) استفاده شده است
نكته: قالب اين تابع بصورت (StartDate1,EndDate2,StartDateMahdodeJostjoo,EndMa hdoodeJostjo)
نكته: نتيجه دستور زير 5 ميشود
select dbo.DaysInMM('900101','900508','900503','900520')
يعني 5روز از محدوده انتخابي دوم در محدوده انتخابي اول وجود دارد
نكته: اگر كسي توابع من را كامل تر و يا توابع ديگري رو خودش نوشته در اين تاپيك بگنجونه تا بچه هاي گلمون بتونن ازش استفاده كنن
GO
/****** Object: UserDefinedFunction [dbo].[DaysInMM] Script Date: 07/31/2011 17:23:04 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
-- =============================================
-- Author: Kambiz Shahriary nasab
-- Create date: 25,july,2011
-- Description:
-- =============================================
ALTERFUNCTION [dbo].[DaysInMM](@d1 nvarchar(6), @d2 nvarchar(6),@dm1 nvarchar(6), @dm2 nvarchar(6))
RETURNSint
AS
BEGIN
DECLARE @x int, @y int, @dd int, @d int;
set @d=ABS(dbo.DiffDays(@d1,@d2))
set @x=ABS(dbo.DiffDays(@d1,@dm1))
set @y=ABS(dbo.DiffDays(@dm2,@d2))
set @dd=@d-(@x+@y)+1
if(@dd<0)
begin
set @dd=0
end
RETURN @dd
END
myaffa
یک شنبه 09 مرداد 1390, 17:29 عصر
تابع تبديل عدد سه رفمي به حروف
GO
/****** Object: UserDefinedFunction [dbo].[NToHHuge] Script Date: 07/31/2011 17:43:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Kambiz Shahriary nasab
-- Create date: 31,july,2011
-- Description:
-- =============================================
ALTERFUNCTION [dbo].[NToH](@n int)
RETURNSnvarchar(30)AS
BEGIN
DECLARE @len int
DECLARE @partYek int
DECLARE @partYekr nvarchar(10)
DECLARE @partDah int
DECLARE @partDahr nvarchar(10)
DECLARE @partSad int
DECLARE @partSadr nvarchar(10)
SET @len=len(@n)
IFCAST(@n ASfloat)=0 return''
IF @len=3
BEGIN
SET @partSad=SUBSTRING(CONVERT(char,@n),1,1)
SET @partDah=SUBSTRING(CONVERT(char,@n),2,1)
SET @partYek=SUBSTRING(CONVERT(char,@n),3,1)
END
IF @len=2
BEGIN
SET @partSad=0
SET @partDah=SUBSTRING(CONVERT(char,@n),1,1)
SET @partYek=SUBSTRING(CONVERT(char,@n),2,1)
END
IF @len=1
BEGIN
SET @partSad=0
SET @partDah=0
SET @partYek=SUBSTRING(CONVERT(char,@n),1,1)
END
IF @partSad=0 SET @partSadr=''
IF @partSad=1 SET @partSadr=''
IF @partSad=2 SET @partSadr=''
IF @partSad=3 SET @partSadr=''
IF @partSad=4 SET @partSadr=''
IF @partSad=5 SET @partSadr=''
IF @partSad=6 SET @partSadr=''
IF @partSad=7 SET @partSadr=''
IF @partSad=8 SET @partSadr=''
IF @partSad=9 SET @partSadr=''
IF @partdah=0 SET @partdahr=''
IF @partdah=2 SET @partdahr=''
IF @partdah=3 SET @partdahr=''
IF @partdah=4 SET @partdahr=''
IF @partdah=5 SET @partdahr=''
IF @partdah=6 SET @partdahr=''
IF @partdah=7 SET @partdahr=''
IF @partdah=8 SET @partdahr=''
IF @partdah=9 SET @partdahr=''
IF @partdah=1
BEGIN
SET @partyekr=''
IF @partyek=0 SET @partdahr=''
IF @partyek=1 SET @partdahr=''
IF @partyek=2 SET @partdahr=''
IF @partyek=3 SET @partdahr=''
IF @partyek=4 SET @partdahr=''
IF @partyek=5 SET @partdahr=''
IF @partyek=6 SET @partdahr=''
IF @partyek=7 SET @partdahr=''
IF @partyek=8 SET @partdahr=''
IF @partyek=9 SET @partdahr=''
goto endMethod
END
چون اين تابع طولانيه نتونستم اونو اينجا كامل بذارم ادامشو تو پست بعدي بگيريد
myaffa
یک شنبه 09 مرداد 1390, 17:30 عصر
ادامه تابع تبديل عدد به حروف
IF @partYek=0 SET @partYekr=''
IF @partYek=1 SET @partYekr=''
IF @partYek=2 SET @partYekr=''
IF @partYek=3 SET @partYekr=''
IF @partYek=4 SET @partYekr=''
IF @partYek=5 SET @partYekr=''
IF @partYek=6 SET @partYekr=''
IF @partYek=7 SET @partYekr=''
IF @partYek=8 SET @partYekr=''
IF @partYek=9 SET @partYekr=''
endMethod:
IF @partSad>0 AND @partDah>1 AND @partYek>1
BEGIN
RETURN @partSadr +' '+ @partDahr +' '+ @partYekr
ENDIF (@partSad>0 AND @partDah>0)or(@partSad>0 AND @partYek>0)
BEGIN
RETURN @partSadr +' '+ @partDahr +' '+ @partYekr
ENDIF @partDah>1 AND @partYek>0
BEGIN
RETURN @partSadr +' '+ @partDahr +' '+ @partYekr
END
RETURN @partSadr +' '+ @partDahr +' '+ @partYekr
END
myaffa
یک شنبه 09 مرداد 1390, 17:32 عصر
تابع تبديل يك عدد 15 رقمي به حروف
نكته: در اين تابع از تابع قبلي (NToH) استفاده كرده ايم
GO
/****** Object: UserDefinedFunction [dbo].[NToHHuge] Script Date: 07/31/2011 17:43:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Kambiz Shahriary nasab
-- Create date: 31,july,2011
-- Description:
-- =============================================
ALTER FUNCTION [dbo].[NToHHuge] (@n varchar(15))
RETURNS nvarchar(150) AS
BEGIN
DECLARE @len int
DECLARE @S nvarchar(30)
DECLARE @H nvarchar(30)
DECLARE @Mn nvarchar(30)
DECLARE @Md nvarchar(30)
DECLARE @T nvarchar(30)
DECLARE @Si int
DECLARE @Hi int
DECLARE @Mni int
DECLARE @Mdi int
DECLARE @Ti int
SET @len=len(@n)
IF CAST(@n AS float)=0 return ''
SET @Si = CAST(SUBSTRING(@n,@len-2,3) AS int)
SET @Hi = CAST(SUBSTRING(@n,@len-5,3) AS int)
SET @Mni = CAST(SUBSTRING(@n,@len-8,3) AS int)
SET @Mdi = CAST(SUBSTRING(@n,@len-11,3) AS int)
SET @Ti = CAST(SUBSTRING(@n,@len-14,3) AS int)
IF @Si > 0 SET @S=dbo.NToH(@Si) Else SET @S=''
IF @Hi > 0 SET @H=dbo.NToH(@Hi) Else SET @H=''
IF @Mni > 0 SET @Mn=dbo.NToH(@Mni) Else SET @Mn=''
IF @Mdi > 0 SET @Md=dbo.NToH(@Mdi) Else SET @Md=''
IF @Ti > 0 SET @T=dbo.NToH(@Ti) Else SET @T=''
باز هم به دليل طولاني بودن كد بايد ادامه آنرا در تاپيك بعدي بگيريد
myaffa
یک شنبه 09 مرداد 1390, 17:33 عصر
ادامه تابع تبديل عدد 15 رقمي به حروف
IF @Si=0
BEGIN
IF @Hi=0
BEGIN
IF @Mni=0
BEGIN
IF @Mdi=0
BEGIN
RETURN @T+' '
END IF @Ti=0
BEGIN
RETURN @Md+' '
END
RETURN @T+' '+@Md+' '
END IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @Mn+' '
END
RETURN @T+' '+@Mn+' '
END IF @Ti=0
BEGIN
RETURN @Md+' '+@Mn+' '
END
RETURN @T+' '+@Md+' '+@Mn+' '
END IF @Mni=0
BEGIN
IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @H+' '
END
RETURN @T+' '+@H+' '
END IF @Ti=0
BEGIN
RETURN @Md+' '+@H+' '
END
RETURN @T+' '+@Md+' '+@H+' '
END IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @Mn+' '+@H+' '
END
RETURN @T+' '+@Mn+' '+@H+' '
END IF @Ti=0
BEGIN
RETURN @Md+' '+@Mn+' '+@H+' '
END
RETURN @T+' '+@Md+' '+@Mn+' '+@H+' '
END IF @Hi=0
BEGIN
IF @Mni=0
BEGIN
IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @S
END
RETURN @T+' '+@S
END IF @Ti=0
BEGIN
RETURN @Md+' '+@S
END
RETURN @T+' '+@Md+' '+@S
END IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @Mn+' '+@S
END
RETURN @T+' '+@Mn+' '+@S
END IF @Ti=0
BEGIN
RETURN @Md+' '+@Mn+' '+@S
END
RETURN @T+' '+@Md+' '+@Mn+' '+@S
END IF @Mni=0
BEGIN
IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @H+' '+@S
END
RETURN @T+' '+@H+' '+@S
END IF @Ti=0
BEGIN
RETURN @Md+' '+@H+' '+@S
END
RETURN @T+' '+@Md+' '+@S
END IF @Mdi=0
BEGIN
IF @Ti=0
BEGIN
RETURN @Mn+' '+@H+' '+@S
END
RETURN @T+' '+@Mn+' '+@H+' '+@S
END
RETURN @Md+' '+@Mn+' '+@H+' '+@S
END
myaffa
یک شنبه 23 مرداد 1390, 14:49 عصر
تابع كار با تاريخ ميلادي
با اين تابع ميتونيد با ارسال يك تاريخ ميلادي يك تاريخ شمسي را دريافت كنيد
73793
http://barnamenevis.org/images/misc/pencil.png
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.