Hiển thị kết quả từ 1 đến 9 / 9
  1. #1
    Tham gia
    09-10-2012
    Bài viết
    26
    Like
    6
    Thanked 0 Times in 0 Posts

    So sánh ngày tháng trong DB với ngày tháng hiện tại

    Chào anh em vấn đề của mình thế này. mình đang làm ứng dụng winform bằng C#, SQL Server 2008. có 1 form danh sách nhân viên trong đó có các cột họ tên ngày sinh............ bây giờ mình muốn so sánh ngày tháng sinh của tất cả nhân viên đó với ngày tháng hiện tại nếu ngày tháng của nhân viên nào mà bằng với ngày tháng hiện tại thì có 1 texbox hiện câu chúc mừng sinh nhật và hiện cả họ tên nhân viên đó nữa. cám ơn anh em rất nhiều
    Quote Quote

  2. #2
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Dùng datediff với tham số là năm để tìm số năm cách biệt giữa hai ngày.
    Dùng hàm dateadd với tham số là năm để cộng số năm này vào năm sinh.
    Nếu kết quả bằng ngày hôm nay thì là ngày sinh nhật.

    (Tự tìm lấy cách gải quyết ngày 29/02)

  3. #3
    Tham gia
    30-03-2011
    Bài viết
    138
    Like
    3
    Thanked 5 Times in 5 Posts
    sao không cố gắng đọc sách sqlserver nhĩ, đây là vấn đề quá cơ bản mà không biết. Bạn tìm trên google còn nhanh hơn hỏi ở đây.

  4. #4
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Quote Được gửi bởi thuongpho.com View Post
    sao không cố gắng đọc sách sqlserver nhĩ, đây là vấn đề quá cơ bản mà không biết. Bạn tìm trên google còn nhanh hơn hỏi ở đây.
    Chỉ tầm bậy mà cũng bày đặt làm phách.

  5. #5
    Tham gia
    13-04-2013
    Bài viết
    52
    Like
    0
    Thanked 2 Times in 2 Posts

    re

    Bạn chỉ cần so sánh ngày & tháng trùng nhau là sinh nhật của họ, ko cần so sánh năm
    123quangcao. net

  6. #6
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Quote Được gửi bởi hta1812 View Post
    Bạn chỉ cần so sánh ngày & tháng trùng nhau là sinh nhật của họ, ko cần so sánh năm
    Gặp sinh ngày 29/02 thì 4 năm sinh nhật 1 lần?

  7. #7
    Tham gia
    11-08-2007
    Bài viết
    80
    Like
    5
    Thanked 4 Times in 3 Posts
    nghịch tí ^^

    Code:
    DECLARE @bod DATE
    DECLARE @n	DATE
    
    SELECT @bod = '19840229'
    SELECT @n = '20130228'
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(DD, 1, @bod)
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(YYYY, DATEDIFF(YYYY, @bod, @n), @bod)
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(DD, -1, @bod)
    
    SELECT @bod 
    
    IF DATEPART(DD, @bod) = DATEPART(DD, @n) AND DATEPART(MM, @bod) = DATEPART(MM, @n)
    	SELECT 'Happy birth day to you'
    ELSE
    	SELECT 'Good day'

  8. #8
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Quote Được gửi bởi chip07 View Post
    nghịch tí ^^

    Code:
    DECLARE @bod DATE
    DECLARE @n	DATE
    
    SELECT @bod = '19840229'
    SELECT @n = '20130228'
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(DD, 1, @bod)
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(YYYY, DATEDIFF(YYYY, @bod, @n), @bod)
    
    SELECT @bod 
    
    SELECT @bod = DATEADD(DD, -1, @bod)
    
    SELECT @bod 
    
    IF DATEPART(DD, @bod) = DATEPART(DD, @n) AND DATEPART(MM, @bod) = DATEPART(MM, @n)
    	SELECT 'Happy birth day to you'
    ELSE
    	SELECT 'Good day'
    Con tính chỉ cần viết 1 dòng thôi cô/cậu ạ

    Code:
    USE [TestDataBase]
    GO
    /****** Object:  UserDefinedFunction [dbo].[TestSinhNhat]    Script Date: 07/08/2013 09:59:55 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date, ,>
    -- Description:	Hàm tính ngày sinh nhật
    -- Nếu là ngày sinh nhật thì trả về 1, nếu không thì 0
    -- =============================================
    CREATE FUNCTION [dbo].[TestSinhNhat] 
    (
    	@NgaySinh AS DateTime, -- ngày sinh
    	@NgayHN AS DateTime = NULL -- ngày cần tính, nếu là hôm nay thì ghi là default
    )
    RETURNS Int
    AS
    BEGIN
    	RETURN CASE 
    	DATEDIFF(day,DATEADD(year,DATEDIFF(year,@NgaySinh,COALESCE(@NgayHN,GETDATE())),@NgaySinh),
    		COALESCE(@NgayHN, GETDATE())) WHEN 0 THEN 1 ELSE 0 END
    END
    
    
    Gọi hàm:                                           Kết Quả
    
    Select dbo.testSinhNhat('20000229', '20100228')         1
    Select dbo.testSinhNhat('20001015', default)         0
    Select dbo.testSinhNhat('20000708', default)         1

  9. #9
    Tham gia
    11-08-2007
    Bài viết
    80
    Like
    5
    Thanked 4 Times in 3 Posts
    ẹc, thế cái trên ko viết thành 1 dòng được chắc ^^

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •