(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2,120)+' 05:00' and convert(varchar(10),vdatetime2,120)+' 22:59' then '白天'else '夜间' end) as '时段'各位老师谁能帮我改下,按照我的写法改成前夜、后夜。前夜时间段是21点到0点,后夜时间段是0.01到5点。

解决方案 »

  1.   

    我的这条是判断前夜后夜的,(case when convert(varchar(16),vdatetime2,120) between convert(varchar(10),vdatetime2,120)+' 05:00' and convert(varchar(10),vdatetime2,120)+' 22:59' then '白天'else '夜间' end) as '时段'。很方便我来调用。想请各位老师帮我改成,前夜、后夜
      

  2.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  3.   


    (case when vdatetime2 between CONVERT(varchar(10),vdatetime2,120)+' 05:00' 
    and CONVERT(varchar(10),vdatetime2,120)+' 20:59' then '白天'
    when vdatetime2 between CONVERT(varchar(10),vdatetime2,120)+' 21:00' 
    and CONVERT(varchar(10),vdatetime2,120)+' 23:59' then '前夜'
    else '后夜' end)
      

  4.   

    (
    case when 
      vdatetime2 
    between 
     CONVERT(varchar(10),vdatetime2,120)+' 05:00' 
    and 
     CONVERT(varchar(10),vdatetime2,120)+' 20:59' then '白天'
    when
     vdatetime2 
    between CONVERT(varchar(10),vdatetime2,120)+' 21:00' 
    and
     CONVERT(varchar(10),vdatetime2,120)+' 23:59' then '前夜'
    else
     '后夜' end
    )
      

  5.   

    谢谢老师,那老师我想这样。如:
    姓名     类别    时间
    王        A      2010-1-30
    王        A      2010-1-31
    王        a      2010-1-16
    显示:
    姓名     数量     周末次数
    王       3          2
    一周计算一次呢?就是说一个周六周日算一次,
      

  6.   

    谢谢老师,那老师我想这样。如: 
    姓名    类别    时间 
    王        A      2010-1-30 
    王        A      2010-1-31 
    王        a      2010-1-16 
    显示: 
    姓名    数量    周末次数 
    王      3          2 
    一周计算一次呢?就是说一个周六周日算一次,
      

  7.   

    我是这样判断的,( CASE WHEN(datepart(dw, vdatetime2)>=6 AND CONVERT(VARCHAR(8),vdatetime2,108)>'23:00') OR (datepart(dw, vdatetime2)=7 )or (datepart(dw, vdatetime2)=1 ) OR(datepart(dw, vdatetime2)=2 AND CONVERT(VARCHAR(8),vdatetime2,108)<'04:59')THEN '休' ELSE '不休' END) as 'xxx',
    然后:双休日=sum(双休日),
    可是这样就成周末次数3次了
      

  8.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-28 20:51:32
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([姓名] varchar(2),[类别] varchar(1),[时间] datetime)
    insert #TB
    select '王','A','2010-1-30' union all
    select '王','A','2010-1-29' union all
    select '王','A','2010-1-31' union all
    select '王','a','2010-1-16' union all
    select '王','a','2010-1-17'
    --------------开始查询--------------------------
    select 
    姓名,类别,时间,
    CASE WHEN DATEPART(DW,时间)=7 THEN 1 ELSE DATEPART(DW,时间) END AS 星期几 ,
    CASE WHEN DATEPART(DW,时间)=1 THEN DATEPART(WK,时间)-1 ELSE DATEPART(WK,时间) END AS 第几周 INTO #Tfrom #TBSELECT 
    姓名,
    类别,
    (SELECT COUNT(*) FROM #T WHERE 姓名=T.姓名 AND 类别=T.类别)AS 数量,
    COUNT(DISTINCT LTRIM(星期几)+LTRIM(第几周)) AS 周末次数
    FROM #T TGROUP BY 姓名,类别--DROP TABLE #T,#TB
    ----------------结果-- --------------------------
    /* (所影响的行数为 5 行)
    (所影响的行数为 5 行)姓名   类别   数量          周末次数        
    ---- ---- ----------- ----------- 
    王    a    5           3(所影响的行数为 1 行)
    */