我在列中的存储重量(以磅为单位),需要转换为KG。我能够通过一个简单的查询来做到这一点:
SELECT ( weight * 0.45 ) as weight from TABLE
但是,这不适用于作为范围存储的值,例如。 '200-300'。如果我使用相同的查询,它将返回440.925
而不是440-661
。我知道这种情况的发生是因为我要对字符串进行乘法运算,但是有一种方法可以乘以范围值(200-300)以得到所需的结果。
如果没有,我应该如何理想地转换此范围?
答案 0 :(得分:1)
SUBSTRING_INDEX
在这里很有用:
SELECT IF(
INSTR(weight, '-') > 0, /* Does weight contain a dash? */
CONCAT( /* Yes? Multiply each, and return them: */
SUBSTRING_INDEX(weight, '-', 1) * 0.45,
' - ',
SUBSTRING_INDEX(weight, '-', -1) * 0.45
),
weight * 0.45 /* No? Just simply multiply the weight */
) AS `range`
FROM test
首先,我们检查一下砝码是否包含破折号,如果包含破折号,请将其分开,然后分别将它们相乘。
在此处查看示例:https://www.db-fiddle.com/f/iELvWDjpVGBZEkpdR4jtsK/0
答案 1 :(得分:0)
使用CAST和SUBSTRING_INDEX函数。
CAST
将确保即使'-'(连字符)字符的两边都有更多空格,它仍将其转换为有效数字。您可以根据自己的应用要求将DECIMAL(10,4)
更改为任意精度。SUBSTRING_INDEX
将在出现'-'(连字符)字符之前找到子字符串。尝试一下:
SELECT
CONCAT(CAST(SUBSTRING_INDEX(weight, '-', 1) AS DECIMAL(10,4)) * 0.45,
'-',
CAST(SUBSTRING_INDEX(weight, '-', -1) AS DECIMAL(10,4)) * 0.45)
AS weight
FROM table
答案 2 :(得分:0)
如果我正确理解了您的问题,则需要执行以下操作。
SELECT
CONCAT (
SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 1), ' - ', -1) * 0.45
, ' - '
, SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 2), ' - ', -1) * 0.45
)
FROM
table
1)嵌套SUBSTRING_INDEX
函数可以从字符串中提取项目。
2)由于MySQL自动类型转换,因此不需要CAST函数。