2017-02-09 45 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

工作!我可以稍微改變它以獲得我想要的結果。 唯一不同的是'&',我以爲我嘗試過,但我猜不是。 謝謝。 –