SQL查询在Select中使用CASE

时间:2011-06-28 07:03:59

标签: sql-server-2008 stored-procedures select case

您好我有一个SQL查询:

select DateDiff(d,StartDate, EndDate) DaysEmployed from ClientDayActivity

我希望这会变成这样:

EmployDays = CASE WHEN NOT end_date IS NULL THEN
DATEDIFF(d,start_date, end_date) ELSE   
DATEDIFF(d,start_date, CONVERT(DATETIME, '" & Cstr(strEndDate) & "', 102)) END

我从旧应用程序中选择了此查询,我必须根据我的数据库和应用程序使用它。我捡起来了 这个来自asp代码的查询,他们有一串查询。我不知道这是什么: '" & Cstr(strEndDate) & "'

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

'" & Cstr(strEndDate) & "'这看起来像是来自VB的动态SQL语句。

strEndDate是某个变量的名称,该变量可能包含一个日期,然后使用Cstr将其转换为字符串,然后添加到SQL语句中。

如果你想在存储过程中做类似的事情,你可能会想要

EmployDays = CASE WHEN NOT end_date IS NULL THEN
DATEDIFF(d,start_date, end_date) ELSE   
DATEDIFF(d,start_date, @end_date) END

其中@end_date是参数。或者,您可以使用GetDate(),这将使用今天的日期,这将在案例陈述逻辑和列别名

的情况下有所帮助

以下是选择

中的示例
SELECT
    CASE 
      WHEN NOT end_date IS NULL THEN
        DATEDIFF(d,start_date, end_date) 
     ELSE   
       DATEDIFF(d,start_date, @end_date) 
   END as EmployDays,
   some_other_field
FROM
       sometable