|
|
|
คำนวณ วัน/เดือน/ปี เกิด asp.net(C#) คำนวณออกมาเห็น อายุ ? ปี ? เดือน ? วัน |
|
|
|
|
|
|
|
ต้นแบบมาจากภาษา c++ ในวิชาการเขียนโปรแกรมและอัลกอฯ เมื่อตอนปีหนึ่งนานมากแล้วค่ะ
ที่เขียนนี่จะเป็น store procedure ของ mssql server 2005 เขียนไว้ต้นปีนี้เอง
ในการคำนวนมีการทด ปีอธิกสุรทินให้แล้วค่ะ
ยังไม่รับประกันว่าจะถูกต้อง 100% นะคะ
Code (C#)
/****** Object: UserDefinedFunction [dbo].[DURATION_CALCULATION] Script Date: 03/07/2010 05:38:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: PROUD ,RJB.PNK.U.
-- Create date: 02-ÁÕ¤-2553
-- Description: DURATION_CALCULATION
-- =============================================
-- @VAR_DATE_TIME < Ç´» »Ñ¨¨ØºÑ¹
CREATE FUNCTION [dbo].[DURATION_CALCULATION](@VAR_DATE_TIME DATETIME)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE
@DAY_INTERVAL INT,
@MONTH_INTERVAL INT,
@YEAR_INTERVAL INT,
@TEMP INT,
@SLIDE_BEGIN_DATE DATETIME ,
@SLIDE_END_DATE DATETIME ,
@TEMP_DATE DATETIME ,
@RET_STR NVARCHAR(50);
-- BEGIN CALCULATION USE SLIDE RULE ALGOL
SET @SLIDE_BEGIN_DATE = @VAR_DATE_TIME ;
SET @SLIDE_END_DATE = GETDATE() ;
SET @RET_STR = '' ;
-- HOW SLIDE SHIFT ??
IF(YEAR(@SLIDE_END_DATE)=YEAR(@SLIDE_BEGIN_DATE))
BEGIN
-- DAY SHIFT
-- ¡·´ä»à»ç¹ÇѹÊØ´·éÒ¢ͧà´×͹·ÕèáÅéÇáÅзÓãËéà»ç¹Åºà¾×èͧèÒ¡Ѻ DATEADD
SET @TEMP = (DAY(@VAR_DATE_TIME) - 1) *(-1) ;
-- ¨Ñ´´Ö§ 仢éҧ˹éÒ´éǨӹǹÇѹ·Õèà·èҡѹ
SET @SLIDE_BEGIN_DATE = DATEADD(DAY ,@TEMP ,@VAR_DATE_TIME) ;
SET @SLIDE_END_DATE = DATEADD(DAY ,@TEMP ,GETDATE()) ;
SET @YEAR_INTERVAL = 0 ;
SET @MONTH_INTERVAL = MONTH(@SLIDE_END_DATE) - MONTH(@SLIDE_BEGIN_DATE);
SET @DAY_INTERVAL = DAY(@SLIDE_END_DATE) -1 ;
END
ELSE
BEGIN
-- YEAR SHIFT >> SET MONTH = 1 >> JAN
SET @SLIDE_BEGIN_DATE = dbo.DATE_SERIAL( YEAR(@VAR_DATE_TIME) ,1 ,1 ) ;
-- ËÒªèǧ¡Òà SHIFT
SET @TEMP = (DATEDIFF( DAY ,@SLIDE_BEGIN_DATE ,@VAR_DATE_TIME ) * (-1)) -1 ;
if ((YEAR(@SLIDE_BEGIN_DATE) % 4)=0)
BEGIN
SET @TEMP = @TEMP+1 ; -- »Õ͸ԡÃÊØ÷Թ
END
-- ´Ö§ÇѹÊØ´·éÒÂä»à·èÒæ¡Ñ¹ << that's call slide rule
SET @SLIDE_END_DATE = DATEADD(DAY ,@TEMP ,GETDATE() ) ;
SET @RET_STR = CONVERT(VARCHAR(20) ,@SLIDE_END_DATE ,102) + '|' ;
-- EASY TO CALCUTION NOW
SET @YEAR_INTERVAL = YEAR(@SLIDE_END_DATE) - YEAR(@SLIDE_BEGIN_DATE) ;
SET @MONTH_INTERVAL = MONTH(@SLIDE_END_DATE) -1 ;
SET @DAY_INTERVAL = DAY(@SLIDE_END_DATE) ;
-- FINE TUNE
IF (@YEAR_INTERVAL <0)
BEGIN
SET @YEAR_INTERVAL = 0 ;
END
IF ((MONTH(@SLIDE_END_DATE)=12) AND (@DAY_INTERVAL=31))
BEGIN
SET @YEAR_INTERVAL = @YEAR_INTERVAL +1 ;
SET @MONTH_INTERVAL = 0 ;
SET @DAY_INTERVAL = 0 ;
END
--SET @TEMP_DATE =
END
-- ¨Ñ´ãËéÊǧÒÁ àÈÉã´ÁÕ¤èÒà·èҡѺÈÙ¹Âì¡ç¨ÐäÁè¹ÓÍÍ¡ÊÙèÊÒµһÃЪҪ¹¤èÐ
SET @RET_STR = '' ;
IF ( @YEAR_INTERVAL > 0)
BEGIN
SET @RET_STR = @RET_STR + CONVERT(NVARCHAR(10) ,@YEAR_INTERVAL ) + N' »Õ ';
END
IF ( @MONTH_INTERVAL > 0)
BEGIN
SET @RET_STR = @RET_STR + CONVERT(NVARCHAR(10) ,@MONTH_INTERVAL ) + N' à´×͹ ' ;
END
IF ( @DAY_INTERVAL > 0)
BEGIN
SET @RET_STR = @RET_STR + CONVERT(NVARCHAR(10) ,@DAY_INTERVAL ) + N' Çѹ ' ;
END
/*
-- DEBUG ONLY
SET @RET_STR = @RET_STR + CONVERT(VARCHAR(20) ,@DAY_INTERVAL ) + ':'
+ CONVERT(VARCHAR(20) ,@MONTH_INTERVAL ) + ':'
+ CONVERT(VARCHAR(20) ,@YEAR_INTERVAL ) ;
*/
RETURN RTRIM(LTRIM(@RET_STR)) ;
END
GO
Go to : C# DateDiff ฟังก์ชั่นคำนวนอายุ C# ,Extension method ,MS SQL และ MySQL
|
ประวัติการแก้ไข 2010-08-27 11:58:50
|
|
|
|
Date :
2010-08-27 11:58:06 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|