我在列中保存了字符串
23.42 / 3 .............
我必须提取2/3并将其转换为0.6
将varchar值2/3转换为0.6是一个问题,提取不是问题。
2/3不是固定数字,它可以是我必须将其转换为十进制的任何分数
答案 0 :(得分:1)
对于MySQL,假设字符串值中只有一个斜杠字符,您可以在此查询中使用类似于res
别名的表达式:
SELECT t.str
, RIGHT(SUBSTRING_INDEX(t.str,'/',1),1)+0 AS num
, LEFT(SUBSTRING_INDEX(t.str,'/',-1),1)+0 AS den
, (RIGHT(SUBSTRING_INDEX(t.str,'/',1),1)+0)
/ (LEFT(SUBSTRING_INDEX(t.str,'/',-1),1)+0) AS res
FROM ( SELECT '1234.62/4' AS str
UNION ALL SELECT '1/4'
UNION ALL SELECT '11/16'
UNION ALL SELECT '/5'
UNION ALL SELECT 'foo/5'
UNION ALL SELECT 'fee3/4fi5/6'
UNION ALL SELECT 'bar/'
UNION ALL SELECT '/'
UNION ALL SELECT ''
) t
返回:
str num den res
----------- ------ ------ --------
1234.62/4 2 4 0.5
1/4 1 4 0.25
11/16 1 1 1
/5 0 5 0
foo/5 0 5 0
fee3/4fi5/6 3 6 0.5
bar/ 0 0 (NULL)
/ 0 0 (NULL)
0 0 (NULL)
res
的表达式只是num
(分子)的表达式除以den
(分母)的表达式。这些额外的列将作为这些工作方式的演示返回。做分工很简单。
如果您需要验证最多只有一个斜杠,在评估表达式以计算分数中的十进制值之前,您可以使用这样的表达式...
SELECT IF(CHAR_LENGTH(t.str)-CHAR_LENGTH(REPLACE(t.str,'/',''))=1, expr, 0)
只需将expr
替换为您在上述查询中用于res
的表达式。