我正在运行以下查询:
SELECT
SUBSTRING(pluginText,LOCATE('cvss', pluginText), 21) AS CVSS_Base_Score_Text,
CONVERT(SUBSTRING_INDEX(SUBSTRING(pluginText,
LOCATE('cvss', pluginText), 21),' : ',-1),UNSIGNED INTEGER)
AS CVSS_Base_Score_Number
FROM vulnerabilities_internal
WHERE LCASE(pluginText) REGEXP '.*cvss.*'
它返回 2 列
CVSS_Base_Score_Text CVSS_Base_Score Number
CVSS Base Score: 4.3 4
如何修改此查询,使 CVSS_Base_Score_Number 列中的数字保留小数点并显示为 4.3?
回答了我自己的问题:
SELECT
SUBSTRING(pluginText,LOCATE('cvss', pluginText), 21) AS CVSS_Base_Score_Text,
CONVERT(SUBSTRING_INDEX(SUBSTRING(pluginText,LOCATE('cvss', pluginText), 21),' : ',
-1),
DECIMAL(10,1)) AS CVSS_Base_Score_Number
FROM vulnerabilities_internal
最佳答案
下面是将为您提供所需结果的查询。
SELECT
SUBSTRING(pluginText,LOCATE('cvss', pluginText), 21) AS CVSS_Base_Score_Text,
CAST(SUBSTRING_INDEX(SUBSTRING(pluginText,
LOCATE('cvss', pluginText), 21),' : ',-1) as decimal(2,1))
AS CVSS_Base_Score_Number
FROM vulnerabilities_internal
WHERE LCASE(pluginText) REGEXP '.*cvss.*'
关于MySQL在小数点后转换丢失数字的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742751/