2017-02-09 47 views
0

为什么不会在火鸟SQL声明如下工作:在火鸟使用在IIF或CASE语句提取物()SQL

IIF((EXTRACT(WEEKDAY FROM TIMESHEETLINES.DATEWORKED)) = 0, 
    "SUNDAY", 
    TIMESHEETLINES.DATEWORKED) 

目的,如果把日期的“收官周”类别。因此,无论在工作日期中输入了哪个日期,该报告都会在周末结束时显示。

我可以使用嵌套的if或case语句,但由于case语句不起作用,我试图将其分解为IFF语句。但是,既不喜欢使用我自己工作的EXTRACT函数,也不喜欢使用IFF或CASE语句。

+1

'case语句没有work' ......什么样的错误做了'CASE'表达给你? –

+0

请添加一些示例数据,预期结果和实际结果。 –

+0

我几乎得到了我想要的信息: TIMESHEETLINES.DATEWORKED + 7-EXTRACT(WEEKDAY FROM TIMESHEETLINES.DATEWORKED)作为“WEEK ENDING” 如果员工在5月1日工作,我想要另一列是称为周末,并将产生8/1(星期日)。 目前SQL运行失败,而不是产生不正确的结果。上述声明的作用除了某人在周日增加了一周的工作时间外。我可以通过使用IIf语句来解决这个问题,但是我无法获得IIF语句和EXTRACT语句一起工作。 –

回答

1

IIF(Cond, Result1, Result2) is a shortcut for “CASE WHEN Cond THEN Result1 ELSE Result2 END”. You can also compare IIF to the ternary “? :” operator in C-like languages.

实施例:

select iif(sex = 'M', 'Sir', 'Madam') from Customers 

使用'星期日',而不是 “星期日”。双引号表示方言3的字段或表格的名称(感谢Mark Rotteveel)。

SQL Dialects

所以,尽量:

select IIF((EXTRACT(WEEKDAY FROM TIMESHEETLINES.DATEWORKED))=0,'SUNDAY', 
TIMESHEETLINES.DATEWORKED) from TIMESHEETLINES 
+0

除非OP使用方言1数据库。 –

+0

DATEWORKED))后面有一个太多的闭括号,但即使我修复时也有相同的问题,甚至不会运行。它出现了错误: [ODBC Firebird驱动程序] [火鸟]动态SQL错误 –

+0

工作!我可以稍微改变它以获得我想要的结果。 唯一不同的是'&',我以为我尝试过,但我猜不是。 谢谢。 –