我有一个数据集,其中记录来自另一个我无法控制的系统。在一个字段中,存在诸如“ $ 200”和“ 20%”的值。我想使用一些聚合函数(AVG,中位数等)分析数字数据,如何在不真正从数据库中删除字符的情况下,出于计算目的而去除前导$或尾随%?
答案 0 :(得分:0)
您可以在mysql中使用REPLACE()函数将您的值替换为空字符串。并且,如果需要任何强制转换,可以使用CAST()。
REPLACE('$', REPLACE('%', str, ''), '') // check both '$', '%' occurrences and replace
CAST(str AS UNSIGNED)
如果需要对'$'或'%'进行特定操作,则必须先使用LOCATE()检查值中的'$'或'%'标记,
LOCATE('$', str) > 0 // if '$' in the str
LOCATE('%', str) > 0 // if '%' in the str
答案 1 :(得分:0)
是的,这是可能的。通常有两种方法可以使这项工作:
在进行聚合之前,可以使用REPLACE()切掉非数字部分来对字符串进行篡改。如果您有一列具有固定的非数字部分(例如,当您汇总百分比或类似数值时。然后,一旦有了“干净”字符串,就可以根据需要将其强制转换为整数。考虑:
SELECT CAST(REPLACE('%','25%','')AS UNSIGNED)AS编号
恢复数字后,您可以执行类似的操作
SELECT
AVG(CAST(REPLACE('%', myPct, '') AS UNSIGNED)) + '%' AS averagePct
FROM myTable
如果您需要输出再次使符号带有特征。这样做不会修改任何表数据。
但是,一般而言,将符号放在数字列中被认为是不好的做法,应尽可能避免使用。您可以根据需要添加%和$分隔列之类的内容,但切勿混用这种数据类型,以免需要执行类似我上面概述的丑陋和易碎的工作。