【问题标题】:MYSQL QUERY, ALL ABOUT CONCATMYSQL 查询,所有关于 CONCAT
【发布时间】:2012-01-18 11:46:54
【问题描述】:

这是我的查询

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

但是当我尝试查询它时,我的答案总是等于 $0,就像 (ON_HAND*PRICE) 不起作用

这些是值:

微波炉 == 32*$165 气体范围 == 8*495 洗碗机 ==8*595 烘干机 ==12*349.95 垫圈 ==128399.99

这一定是结果:

PART_NUM----DESCRIPTION ---------ON_HAND_VALUE CD52 -----------微波炉----$5280 DR93----------- 燃气灶----------- $3960 KT03----------- 洗碗机----------- $4760 KL62----------- 烘干机----------- $41994.4 DW11----------- 垫圈----------- $4799.88

【问题讨论】:

  • ON_HANDPRICE字段的data_type是什么?
  • @bpgergo ON_HAND 是 int 而 PRICE 是 varchar
  • 老实说我觉得不错;但是我遇到的几个示例使用格式来处理可能的小数情况。 CONCAT('$',FORMAT(ON_hand*price),2)) 幽默:旁注:那是一台昂贵的洗衣机(128399.99 应该是 12*399.99)也许 bpgergo 是在正确的道路上,但一个不是数字。跨度>
  • 你不能用 varchar 做数学运算,你必须把它转换成数字。所以像 CONCAT('$',(ON_HAND*cast(PRICE, Decimal(10,2)))

标签: mysql database concat


【解决方案1】:

从您的 cmets 来看,这不起作用的原因是 (On_Hand*price) 的结果是错误的(您将数字与字符串相乘)

另一方面,如果 on_hand 是 int 而 price 是 decimal/double/float,那么您可以使用以下命令获得正确的结果:

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

如果 PRICE 是 varchar,我强烈建议在继续之前将其存储为 decimal。如果您将价格存储为varchars,您遇到的这个问题只是您头疼的开始。

如果这不可能,那么您可以查看 Cast() 函数,在执行乘法之前先将您的 varchar 转换为 decimalfloat

编辑:

MySQL 似乎足够聪明,可以自行将 varchars 转换为浮点数,但是当 varchar 字段中有“$”符号时,它就无法工作。

所以也许尝试执行以下操作:

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

【讨论】:

  • 这里的问题是您存储在“价格”字段中的“$”符号。
  • 那是因为 price 仍然是一个 varchar,你需要将它转换为十进制的第一个。
【解决方案2】:

您看,如果您尝试将 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

【讨论】:

  • 这是我得到的先生 :( #1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 'int)*ON_HAND 附近使用的正确语法) AS ON_HAND_VALUE FROM PART LIMIT 0, 30' at line 1
  • 好的,第一件事。这个工作正常吗? SELECT PART_NUM,DESCRIPTION, CAST(PRICE,int) as int_price, ON_HAND FROM part WHERE CLASS ='AP'
  • 如果第一个选择有效,第二个,试试这个SELECT PART_NUM,DESCRIPTION, (CAST(PRICE,int)*ON_HAND) as ON_HAND_VALUE FROM part WHERE CLASS ='AP'
猜你喜欢
  • 2015-12-24
  • 2011-05-29
  • 1970-01-01
  • 2014-02-13
  • 2013-01-07
  • 2015-04-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多