在MySQL中乘以范围

时间:2018-07-26 15:09:44

标签: mysql database

我在列中的存储重量(以磅为单位),需要转换为KG。我能够通过一个简单的查询来做到这一点:

SELECT ( weight * 0.45 ) as weight from TABLE

但是,这不适用于作为范围存储的值,例如。 '200-300'。如果我使用相同的查询,它将返回440.925而不是440-661。我知道这种情况的发生是因为我要对字符串进行乘法运算,但是有一种方法可以乘以范围值(200-300)以得到所需的结果。

如果没有,我应该如何理想地转换此范围?

3 个答案:

答案 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)

使用CASTSUBSTRING_INDEX函数。

  1. CAST将确保即使'-'(连字符)字符的两边都有更多空格,它仍将其转换为有效数字。您可以根据自己的应用要求将DECIMAL(10,4)更改为任意精度。
  2. 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函数。