2011-12-12 70 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