2013-12-20 39 views
5

我想從這些條件的表中檢索一些列值。如果列值爲NULL,如何實現默認值?

  • 如果值是NULL(或)空字符串,返回一些用戶定義的值
  • 如果沒有上述條件下,返回它的值。

我該怎麼弄出來?

這裏是我的表查詢..

CREATE TABLE AUCTION_CAR_BID(
bid_seq bigint NOT NULL AUTO_INCREMENT, 
auction_car_seq bigint NOT NULL, 
bid_group_seq bigint NOT NULL, 
bid_price int DEFAULT 0 NOT NULL, 
over_bid_price int DEFAULT -1 NOT NULL, 
result_id int DEFAULT 0 NOT NULL, 
remark varchar(500), 
PRIMARY KEY (bid_seq)) 
ENGINE = InnoDB DEFAULT CHARACTER SET utf8; 

這是我efforted碼得到它..

SELECT 
    COALESCE(OVER_BID_PRICE, -1) 
FROM 
    AUCTION_CAR_BID 
WHERE 
    BID_SEQ = 2354435345; 

另:

SELECT 
    CASE 
     WHEN OVER_BID_PRICE IS NULL 
     OR TRIM(OVER_BID_PRICE) = '' THEN -1 
     ELSE OVER_BID_PRICE 
    END OVER_BID_PRICE 
FROM 
    AUCTION_CAR_BID 
WHERE 
    BID_SEQ = 2354435345; 

但我總是得到空字符串值(不是-1)如果給出id不在我的桌子上。

任何建議將非常感激!

+0

COALESCE()???? – Strawberry

+1

您是否嘗試過:'CASE WHEN(price is NULL or price ='') –

+0

@Strawberry我已經用ifnull進行測試,合併,爲空,如果爲空。但仍然麻煩或可能是我錯了。 – Cataclysm

回答

4

如果你這樣寫:

SELECT 
    COALESCE(OVER_BID_PRICE, -1) 
FROM 
    AUCTION_CAR_BID 
WHERE 
    BID_SEQ = 2354435345; 

結果可分爲兩類。

第一個結果:您的查詢沒有返回行!你的WHERE條件unsatisfact所以你會讀到NULL

第二個結果:查詢返回行,但你的字段的值爲NULL,你COALESCE在這種情況下正常工作

要解決,你可以試試這個:

SELECT COALESCE(
    (SELECT 
    COALESCE(OVER_BID_PRICE, -1) 
    FROM AUCTION_CAR_BID 
    WHERE BID_SEQ = 2354435345) 
,-1); 

告訴我,如果它是確定

+0

絕對,現在我明白了。非常感謝你 。祝你今天愉快。因爲你我很高興。 – Cataclysm

+0

@Cataclysm:祝你有個美好的一天;) –

+0

@Cataclysm:Done;) –

2
DROP TABLE prices; 

CREATE TABLE prices (price_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,price INT NULL); 

INSERT INTO prices (price) VALUES (' '),(''),(NULL); 

SELECT * FROM prices; 
+----------+-------+ 
| price_id | price | 
+----------+-------+ 
|  1 |  0 | 
|  2 |  0 | 
|  3 | NULL | 
+----------+-------+ 

SELECT price_id,COALESCE(price,-1) price FROM prices; 
+----------+-------+ 
| price_id | price | 
+----------+-------+ 
|  1 |  0 | 
|  2 |  0 | 
|  3 | -1 | 
+----------+-------+ 
+0

我的表結構是** price int DEFAULT -1 NOT NULL,** – Cataclysm

+1

** SELECT * FROM mytable; **也返回** - 1 **; – Cataclysm

+1

如何在我的SQL中取代** COALESCE **? – Cataclysm

4

如何:

select 
case when price is null or id <> 1 
then -1 
else price 
end price 
from mytable 
2

如果有在你的餐桌USER_SEQ = 2354435345沒有行沒有返回行。但聚合函數總是返回一行,即使結果是空:-)

SELECT 
    COALESCE(MIN(OVER_BID_PRICE), -1) 
FROM 
    USER_PARAM 
WHERE 
    USER_SEQ = 2354435345; 
+0

是的,你是對的。它也工作:)感謝您的有用的知識。 – Cataclysm

相關問題