2009-10-07 50 views
2

这在两个计数上是具有讽刺意味的,1)因为concat(charfield,doublefield)有效(它并不介意当一个要连接的字段是数字),2)因为mysql引用显示了这个:CONCAT(str1,str2,...)作为CONCAT和FORMAT的原型:“FORMAT(X,D)将数字X格式化为像'# ,###,###。##',四舍五入到D小数位数,并且返回结果作为字符串“。mysql select concat(charfield,format(doublefield,8))给出错误1267

无奈之下,我试了select concat(symbol, cast(format(closeprice,8) as char)),它工作。所以你可能会想,“为什么这家伙浪费我们的时间,他发现了一些有效的东西”,这是事实。但对我来说这没有意义,所以我想知道是否有人能够清除它?

回答

4

1267是排序规则的非法组合。 charfield的排序规则(字母顺序排序)和从FORMAT返回的字符串排序规则(可能是您的db服务器的默认排序规则)是不同的。

修改列的排序规则或服务器默认排序规则,或执行强制转换。

0

尝试:

select concat(symbol, CONVERT(cast(format(closeprice,8) as char) USING utf8) COLLATE utf8_bin)) 

正如你可能不喜欢CONCAT(utf8_general_ci,utf8_bin)在CONCAT功能混合字符集编码。

0

今天我有同样的问题,这是对我工作:

查询部分:

CONCAT(payment_currency," ", CONVERT(FORMAT(payment_amount, 2) using utf8)) AS payment_gross_amount 

结果:

PHP 1,250.00 

万一谁家遇到了同样的问题也。 :)