在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知道,我也不喜欢它,但是它是一个提前做出的设计决定,我不能改变它。