所以我有一个字符串列,格式如下:'123.123.123.123.123'
。
我需要将字符串剪切为前两个数字,如下所示:'123.123'
这样我可以GROUP BY
剪切字符串以获得所需的结果。
我可以使用SUBSTRING_INDEX(Version, '.', 2)
轻松完成此操作,但是当第二个数字部分有多个0时会出现问题,因此在查询中给我重复的条目。
e.g。 (10.00, 10.0)
和10.404, 10.4040
等。
有没有办法修剪字符串末尾的所有不需要的零?
注意:在这种情况下,我只能使用直接的MySQL或函数。
修改:
我可以通过替换' .0'的第一个实例来获得所需的结果,修剪额外的零,然后替换' .0'回来
REPLACE(TRIM(TRAILING '0' FROM REPLACE(SUBSTRING_INDEX(Version, '.', 2), '.0', '^a')), '^a', '.0')
这可能不是表现最好的选择 - 因此我会在接受我自己之前等待其他人。
答案 0 :(得分:0)
如果您只使用前两个组件,则将值转换为数字,例如:
cast(substring_index(version, '.', 2) + 0 as decimal(10, 4))
这将为具有相同数值的所有内容提供相同的表示。
编辑:
如果要从字符串的 end 中删除尾随零,可以使用此技巧:
replace(rtrim(replace(substring_index(version, '.', 2), '0', ' ')), ' ', '0')
这会用空格替换零,然后使用rtrim()
并将它们转换回零。