2011-12-12 57 views
0

這是我的查詢MySQL查詢,ALL ABOUT CONCAT

SELECT PART_NUM,DESCRIPTION, CONCAT('$',(ON_HAND*PRICE)) AS ON_HAND_VALUE 
FROM part WHERE CLASS ='AP' 

但是當我試圖查詢它,我的回答將永遠equall $ 0,它像(ON_HAND *價格)不工作

這些都是值:

 
Microwave Oven == 32*$165 
GAS RANGE == 8*495 
DISHWASHER ==8*595 
DRYER ==12*349.95 
WASHER ==128399.99 

這一定是結果:

 
PART_NUM----DESCRIPTION ---------ON_HAND_VALUE 
CD52 -----------MICROWAVE OVEN----$5280 
DR93----------- GAS RANGE----------- $3960 
KT03----------- DISHWASHER----------- $4760 
KL62----------- DRYER----------- $41994.4 
DW11----------- WASHER----------- $4799.88 
+0

什麼是'ON_HAND','PRICE'領域的DATA_TYPE? – bpgergo

+0

@bpgergo ON_HAND是int並且價格是varchar – LittleMissChoco

+0

@bpgergo ...請幫助:( – LittleMissChoco

回答

1

從您的意見,之所以這個心不是工作是(On_Hand *價格)的結果是錯誤的(你是乘用串號)

在另一方面,如果on_hand是int和價格一個decimal/double/float那麼你可以通過以下得到正確的結果:

CONCAT('$',convert(ON_HAND*PRICE,char)) 

如果價格是一個varchar我強烈建議將其存儲爲一個decimal繼續之前。如果您將價格存儲爲varchar s,則您遇到的這個問題僅僅是您將遇到的頭痛問題的開始。

如果這不可行,那麼在執行乘法之前,您可以查看Cast()函數以首先將您的varchar作爲decimalfloat

編輯:

MySQL的似乎是足夠聰明的轉換VARCHAR處理到浮本身,當有在varchar字段一個「$」符號但它不會工作。

所以也許嘗試執行以下操作:

CONCAT('$',convert(ON_HAND*Right(PRICE,Length(Price)-1),char)) 
+0

我仍然得到$ 0 :( – LittleMissChoco

+0

這裏的問題是你存儲在價格字段中的'$'符號 – Simon

+0

這是因爲價格仍然是一個varchar,你需要將它轉換爲十進制第一。 – xQbert

0

你看,你得到奇怪的結果,如果你試圖乘int型和VARCHAR。 試試這個

CONCAT('$',CAST(PRICE,int)*ON_HAND) 

或本

CONCAT('$',CONVERT(PRICE,int)*ON_HAND) 

文檔http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

+0

這就是我得到先生:( #1064 - 您的SQL語法錯誤;檢查手冊,對應於您的MySQL服務器版本的正確的語法使用附近'int )* ON_HAND)作爲ON_HAND_VALUE從PART LIMIT 0,30'在第1行 – LittleMissChoco

+0

好吧,首先要做的事情是第一件事。這個工作正常嗎? 'SELECT PART_NUM,DESCRIPTION,CAST(PRICE,int)as int_price,ON_HAND FROM part WHERE CLASS ='AP'' – bpgergo

+0

如果第一個選擇工作,第二個,試試這個'SELECT PART_NUM,DESCRIPTION,(CAST(PRICE,int) * ON_HAND)as ON_HAND_VALUE FROM part WHERE CLASS ='AP'' – bpgergo