Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中乘以一个范围_Mysql_Database - Fatal编程技术网

在MySQL中乘以一个范围

在MySQL中乘以一个范围,mysql,database,Mysql,Database,我在我的栏中存储了以磅为单位的重量,我需要将其转换为千克。我可以通过一个简单的查询来完成: SELECT ( weight * 0.45 ) as weight from TABLE 但是,这不适用于存储为范围的值,例如“200-300”。如果使用相同的查询,它将返回440.925,而不是440-661。我理解这是因为我将字符串相乘,但是否有一种方法可以将范围值(200-300)相乘以获得所需的结果 如果没有,我应该如何理想地转换此范围?使用、和函数 CAST将确保即使'-'(连字符)字符的两

我在我的栏中存储了以磅为单位的重量,我需要将其转换为千克。我可以通过一个简单的查询来完成:

SELECT ( weight * 0.45 ) as weight from TABLE
但是,这不适用于存储为范围的值,例如“200-300”。如果使用相同的查询,它将返回
440.925
,而不是
440-661
。我理解这是因为我将字符串相乘,但是否有一种方法可以将范围值(200-300)相乘以获得所需的结果

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

使用、和函数

  • CAST
    将确保即使'-'(连字符)字符的两侧有更多空格,它仍会将其转换为有效数字。根据您的应用要求,您可以将
    十进制(10,4)
    更改为任何精度
  • SUBSTRING\u 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
    

    如果我正确理解了你的问题,你需要做如下的事情

    SELECT
     CONCAT (
         SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 1), ' - ', -1) * 0.45
       , ' - '
       , SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 2), ' - ', -1) * 0.45
     )
    FROM
     table
    
    1) 嵌套
    SUBSTRING\u INDEX
    函数可以从字符串中提取项目
    2) 由于MySQL自动类型转换,因此不需要转换函数

    在这里很有用:

    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
    
    首先,我们检查权重是否包含破折号,如果包含破折号,则将其拆分,然后分别相乘


    在这里看到一个例子:

    你真的应该考虑转换DATAI知道,我也不喜欢它,但是它是一个提前做出的设计决定,我不能改变它。