zoukankan      html  css  js  c++  java
  • Sql Server中判断日志是否为一个星期

    1.引出问题

    SQL Server中默认将星期天做为一个星期的第一天,如果你查询以下语句:

    select Datediff(week,'2010/12/12','2010/12/13')
    

    2010/12/12为星期天,2010/12/13为星期一,在我们的眼里两天不是同一个星期则

    查询的结果应为:1,但结果为0,因为Sql server默认星期天为第一天!

    我们可以通过:

    SET Datefirst 1
    

    这样就将星期一设为一个星期的第一天。

    select @@Datefirst
    

    查看当前的第一天设置

    详细可以看MSDN DateFirst

    但设置DateFirst只对Datepart函数生效,DateDiff仍然会当做星期天为一个星期的第一天.

    2.解决方案

    -- 不是一周内
    set DateFirst 1
    select DateDiff(day,'2010/12/12','2010/12/13') as d
    select DATEPART(dw, '2010/12/12') as a,DATEPART(dw, '2010/12/13') as b
    

    d:1   a:7  b:1

    --一周内
    set DateFirst 1
    select DateDiff(day,'2010/12/13','2010/12/14') as d
    select DATEPART(dw, '2010/12/13') as a,DATEPART(dw, '2010/12/14') as b
    

    d:1   a:1  b:2

    通过上述的判断可得到判断两个日期是否为同一星期的条件为:d<7&&b>a(日期差小于7且一周内的星期序号差值为正数)

    我们可以写一个函数:

    注:函数中不能调用SET Datefirst 1

    CREATE FUNCTION WeekEqualToNow(@dt datetime,@dt2 datetime)
    RETURNS BIT
    AS
    BEGIN
      IF(Datediff(day,@dt,@dt2)<7 and
    	 Datepart(dw,@dt2)>Datepart(dw,@dt)) RETURN 1;
      RETURN 0;
    END
    

  • 相关阅读:
    面向对象之继承
    面向对象之封装
    面向对象编程
    Centos7.7镜像源配置
    Centos7环境配置
    多表查询v1
    多表查询
    库相关操作
    数据库初识
    数据相关操作
  • 原文地址:https://www.cnblogs.com/newmin/p/1905832.html
Copyright © 2011-2022 走看看