2017-06-21 61 views
0

我想要做一個選擇,它根據一個控制值計算不同的值(讓我們將其命名爲value1)。我試圖計算兩個值之間的時間差。SQL Select案例 - 我是否正確使用它?

表「測試」看起來像這樣(我沒有創建表的語句,我只是提取和simplyfying活動數據庫的內容):

value1 | value2    | value3    |value4 
PO  | 2017-06-20 21:54:00 | 2017-06-20 21:24:00 |2017-06-20 08:21:00 
HOS | 2017-06-20 21:54:00 | 2017-06-20 21:24:00 |2017-06-20 08:21:00 

select case 
    WHEN test.value1 = 'PO' 
    THEN (test.value2-test.value3) 
    ELSE (test.value2-test.value4) 
    END as "Time" 
    from test 

我得到錯誤:

ERROR: CASE types timestamp without time zone and interval cannot be matched 

簡而言之,如果value1等於'A',那麼我想減去值2和3.值1是字符串,值2,3和4是具有時間的日期。

我理解大小寫錯了嗎?

編輯:好吧,我有時有點遲鈍,我的問題是,VALUE4是字符串,所以我不得不用select to_timestamp

+0

'FROM table_name' is missing。請添加它,並共享您想要運行此查詢的完整表結構 –

+5

如果'value2','value3'和'value4'全部定義爲'timestamp',則應該起作用。請** [編輯] **你的問題,併爲有問題的表添加'create table'語句。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not - 上載圖像的代碼的時候,問一個問題/ 285557#285557) - [編輯]你的問題 - 做**不** **代碼或額外的信息在評論中。從錯誤 –

+0

,你的代碼應該是不同的 –

回答

0

再次選擇它的value3value4列的類型不某些也不兌換到單一類型。錯誤消息清楚地表明瞭這一點。

documentation

The data types of all the result expressions must be convertible to a single output type.

當與postgres的日期和時間值工作,減法操作者可導致各種(不可兌換)的類型。 Table 9-27