zoukankan      html  css  js  c++  java
  • 查询某个时间段在另一个时间段里面的时间

    具体业务:查询当前日期前后三个月的活动时间,日历上面的标签显示活动标记

    SQL:

    select ac.fieldBegin,ac.fieldEnd
    from t_VT_Activity as ac 
    where (ac.fieldBegin BETWEEN DATEADD(MONTH,-3,GETDATE()) AND DATEADD(MONTH,3,GETDATE())

    OR ac.fieldEnd BETWEEN DATEADD(MONTH,-3,GETDATE()) AND DATEADD(MONTH,3,GETDATE()))

    代码:

    public JsonR ActivityDateList()
    {

    var sql = string.Format(@"
    select ac.fieldBegin,ac.fieldEnd
    from t_VT_Activity as ac 
    where (ac.fieldBegin BETWEEN DATEADD(MONTH,-3,GETDATE()) AND DATEADD(MONTH,3,GETDATE())
    OR ac.fieldEnd BETWEEN DATEADD(MONTH,-3,GETDATE()) AND DATEADD(MONTH,3,GETDATE()))
    ")

    int totalCount = 0;

    //查询数据,按照活动开始时间排序,最小的在前面
    var dt = Wathet.DB.Config.Conn_Wathet.Scan_Page(sql, "fieldBegin", 1000, 1, totalCount);
    if (dt != null)
    {
    var list = new List<object>();

    //初始化最开始的日期(3个月前),循环 第一条日期,把活动结束日期赋值给开始日期,如果有了这个日期,就直接跳过日期循环
    DateTime prevTime = DateTime.Now.AddMonths(-3);
    foreach (System.Data.DataRow row in dt.Rows)
    {
    DateTime fieldBegin = row["fieldBegin"].ToDateTime();
    DateTime fieldEnd = row["fieldEnd"].ToDateTime();
    for (DateTime time = prevTime; time < DateTime.Now.AddMonths(3); time = time.AddDays(1))
    {
    if (time >= fieldBegin && time <= fieldEnd)
    {
    if (!list.Contains(time))
    {
    list.Add(time.ToDateTime()); totalCount++;
    }
    }
    }

    //记录插入的最后一个日期
    prevTime = list.Last().ToDateTime();
    }
    return ComEnum.Code.A_操作成功.JsonR(new JsonR_EntityList()
    {
    totalCount = totalCount,
    list = list
    });
    }
    return ComEnum.Code.A_操作失败.JsonR();
    }

    以下为优化版

    public JsonR ActivityCalendar(int year,int month)
    {
    var portalId = Tools.GetPortal();

    var beginDate = (year.ToString() + "-" + month.ToString() + "-" + "01").ToDateTime();
    var endDate = (year.ToString() + "-" + (month + 1).ToString() + "-" + "01").ToDateTime();

    var sql = string.Format(@"
    select ac.fieldBegin,ac.fieldEnd
    from t_VT_Activity as ac with(nolock)
    right join (select id,sourceid,codeno,sortno from t_ui_ele where portalid={0} and valid=1 and deleted=0 and partid={1}) as ele on ele.codeno=ac.codeno
    where (ac.fieldBegin<'{3}' and ac.fieldEnd>='{4}') and
    ac.valid=1 and ac.deleted=0 and ac.typeId={2} ",
    portalId,
    ComEnum.UI_Ele_WX.活动列表.GetHashCode(),
    ComEnum.SaleActivityType.报名.GetHashCode(),endDate,beginDate);

    int totalCount = 0;
    var dt = Wathet.DB.Config.Conn_Wathet.Scan_Page(sql, "fieldBegin", 1000, 1, ref totalCount);
    totalCount = 0;
    if (dt != null)
    {
    var list = new List<object>();

    foreach (System.Data.DataRow row in dt.Rows)
    {

    var fieldBegin = row["fieldBegin"].ToDateTime();
    var fieldEnd = row["fieldEnd"].ToDateTime().AddDays(1);

    var scopeBegin = fieldBegin > beginDate ? fieldBegin : beginDate;
    var scopeEnd = fieldEnd < endDate ? fieldEnd : endDate;

    for (DateTime time = scopeBegin; time < scopeEnd; time = time.AddDays(1))
    {
    var timeFormat = time.Format_yyyyMMdd();
    if (!list.Contains(timeFormat))
    {
    list.Add(timeFormat); totalCount++;
    }
    }
    }
    return ComEnum.Code.A_操作成功.JsonR(new JsonR_EntityList()
    {
    totalCount = totalCount,
    list = list.OrderBy(o=>o).ToList()
    });
    }
    return ComEnum.Code.A_操作失败.JsonR();
    }

  • 相关阅读:
    linux rz -e
    (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
    Searching the Web论文要点
    搜索提示(search suggest)文献阅读
    C++常用数据结构(对照python)
    FM,FFM,GBDT推导
    Ranking relevance in yahoo search (2016)论文阅读
    荀子劝学篇
    不要尝试去锯木屑
    3服务器Java虚拟机配置
  • 原文地址:https://www.cnblogs.com/TREN/p/11325836.html
Copyright © 2011-2022 走看看