Bài viết Hàm tính ngày, tháng, năm giữa hai thời điểm

Thảo luận trong 'SQL' bắt đầu bởi hongoctrien, 29 Tháng năm 2013.

  1. Offline

    hongoctrien

    • Friends

    Số bài viết:
    2.449
    Đã được thích:
    2.464
    Điểm thành tích:
    2.431
    Mã:
    CREATE FUNCTION TinhNgay( @NgayBatDau datetime, @NgayKetThuc datetime )
    RETURNS varchar(100)
    AS
    BEGIN
     
    Declare
    @NgayCuoiThangBD as int , --Ngay cuoi thang cua ngay bat dau
    @NgayCuoiThangKT as int, --Ngay cuoi thang cua ngay ket thuc
    @GiaTriTraVe as varchar ( 100 )
    -- Xac dinh ngay cuoi thang cua 2 thanh phan
    Set @NgayCuoiThangBD = Case
    When Month( @NgayBatDau ) in ( 1,3,5,7,8,10,12 ) Then 31
    When Month( @NgayBatDau ) in ( 4,6,9,11 ) Then 30
    Else
    Case When Year( @NgayBatDau ) % 4 = 0 Then 29 Else 28 End
    End
    Set @NgayCuoiThangKT = Case
    When Month( @NgayKetThuc ) in ( 1,3,5,7,8,10,12 ) Then 31
    When Month( @NgayKetThuc ) in ( 4,6,9,11 ) Then 30
    Else
    Case When Year( @NgayKetThuc ) % 4 = 0 Then 29 Else 28 End
    End
    -- Neu ngay cua ngay bat dau la ngay cuoi thang
    If Day( @NgayBatDau ) = @NgayCuoiThangBD
    Begin
    -- Neu ngay cua ngay ket thuc la ngay cuoi thang
    If Day( @NgayKetThuc ) = @NgayCuoiThangKT
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) ) + ' thang'
    -- Neu ngay cua ngay ket thuc ko phai ngay cuoi thang
    Else
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) - 1 ) + ' thang ' + LTrim ( day ( @NgayKetThuc ) ) + ' ngay'
     
    End
    -- Neu ngay cua ngay bat dau ko phai ngay cuoi thang
    Else
    Begin
    -- Neu ngay cua ngay ket thuc la ngay cuoi thang
    If Day ( @NgayKetThuc ) = @NgayCuoiThangKT
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) ) + ' thang ' + LTrim ( @NgayCuoiThangBD - day ( @NgayBatDau ) ) + ' ngay'
    -- Neu ngay cua ngay ket thuc ko phai ngay cuoi thang
    Else
    -- Neu ngay cua ngay ket thuc = ngay cua ngay bat dau
    If Day ( @NgayKetThuc ) = Day ( @NgayBatDau )
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) ) + ' thang'
    -- Neu ngay cua ngay ket thuc > ngay cua ngay bat dau
    If Day ( @NgayKetThuc ) > Day ( @NgayBatDau )
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) ) + ' thang ' + LTrim ( Day ( @NgayKetThuc ) - Day ( @NgayBatDau ) ) + ' ngay'
    -- Neu ngay cua ngay ket thuc < ngay cua ngay bat dau
    If Day ( @NgayKetThuc ) < Day ( @NgayBatDau )
    -- Luu y: gia tri tra ve truong hop nay mang tinh
    Set @GiaTriTraVe = LTrim ( Datediff ( m,@NgayBatDau,@NgayKetThuc ) - 1 ) + ' thang ' + LTrim ( @NgayCuoiThangBD - Day ( @NgayBatDau ) + Day ( @NgayKetThuc ) ) + ' ngay'
    End
    RETURN ( @GiaTriTraVe )
    END
    Cách sử dụng: Select dbo.TinhCuoc(NgayDatDau,NgayKetThuc)
    lyvinhr00m thích bài này.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí