【问题标题】:Select data where date is the first and second half of the month (SQL)选择日期为上半月和下半月的数据(SQL)
【发布时间】:2013-11-15 09:54:46
【问题描述】:

当系统日期在每月 1 日到 15 日之间,以及系统日期在 16 日到月底之间时,如何检索日期在当月 1 日到 15 日之间的数据月16日到30日/31日之间会自动取回数据吗?

请帮帮我。

我有这个代码。

SELECT 
    CONVERT(VARCHAR(11), DATEADD(DAY, DATEDIFF(DAY, 0, DateTimeIn), 0)) AS [Date],
    CONVERT(TIME(0),DateTimeIn) AS [Time In], CONVERT(TIME(0),DateTimeOut) AS [Time Out],
    Late, Undertime, AWOL, Leave 
FROM 
    tblAttendance2
WHERE 
    UserID = (SELECT UserID FROM tblUsers WHERE Username = @Username) 
    AND MONTH(DateTimeIn) = MONTH(GetDate())
ORDER BY 
    CONVERT(DATE, DateTimeIn, 101) ASC

这显示了整个当月的数据。

谢谢!

【问题讨论】:

    标签: sql sql-server database sql-server-2008 date


    【解决方案1】:

    您可以依靠整数数学非常简单地计算出来:

    WHERE 
    UserID = (SELECT UserID FROM tblUsers WHERE Username = @Username) 
    AND DATEPART(month,DateTimeIn) = DATEPART(month,GetDate())
    AND DATEPART(day,DateTimeIn)/16 = DATEPART(day,GetDate())/16
    

    基本上,从 0 到 15 的任何数字除以 16 都会产生值 0。从 16 到 31 的任何数字除以 16 都会产生值 1。

    (我也切换到DATEPART因为我是个势利小人,因为这是我在将其集成到您的查询之前编写的一天代码,并且因为我喜欢这种方法的一致性 -因为它可以用于检索任何日期时间部分,而MONTHDAYYEAR 中有对应项,但没有类似的函数可以检索,例如小时)

    【讨论】:

      【解决方案2】:

      Sybase解决方案(对于其他DBMS,检查“datepart”函数等价,在MSSQL中应该是一样的。

      SELECT 
          CONVERT(VARCHAR(11), DATEADD(DAY, DATEDIFF(DAY, 0, DateTimeIn), 0)) AS [Date],
          CONVERT(TIME(0),DateTimeIn) AS [Time In], CONVERT(TIME(0),DateTimeOut) AS [Time Out],
          Late, Undertime, AWOL, Leave 
      FROM 
          tblAttendance2
      WHERE 
          UserID = (SELECT UserID FROM tblUsers WHERE Username = @Username) 
          AND MONTH(DateTimeIn) = MONTH(GetDate())
          AND
          (
              (datepart(day, GetDate() <= 15 AND datepart(day, DateTimeIn) <= 15) 
              OR
              (datepart(day, GetDate() > 15 AND datepart(day, DateTimeIn) > 15)
          ) 
      ORDER BY 
          CONVERT(DATE, DateTimeIn, 101) ASC
      

      与其他解决方案基本相同,但更自言自语(在我看来......)。

      【讨论】:

        猜你喜欢
        • 2017-05-06
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 2021-05-31
        • 1970-01-01
        相关资源
        最近更新 更多