我得到了完全令人困惑的结果......我把它归结为:
select
regexp_substr('56.948959;24.121503|56.950469;24.119765', '^[0-9\.]+') raw_txt,
cast('56.948959' as decimal(10,8)) just_cast,
case when regexp_substr('56.948959;24.121503|56.950469;24.119765', '^[0-9\.]+') = '56.948959' then 'yisss' else 'nope' end text_comparison,
cast(regexp_substr('56.948959;24.121503|56.950469;24.119765', '^[0-9\.]+') as decimal(10,8)) full_decimal,
cast(regexp_substr('56.948959;24.121503|56.950469;24.119765', '^[0-9\.]+') as double) full_double
我得到的结果是:
raw_txt: 56.948959
just_cast: 56.94895900
text_comparison: yisss
full_decimal: 56.00000000
full_double: 56.948959
full_decimal
的小数点在哪里?为什么在简单字符串(just_cast
)上运行时,强制转换可以正常工作,而当完全相同的字符串(参见text_comparison
)来自正则表达式匹配时就不行了?但是如果我们强制转换为double
,它仍然可以工作?这是怎么回事?
MySQL版本:8.0.21
1条答案
按热度按时间ecbunoof1#
这被报告为bug。
如果先转换为char,然后重新转换为decimal,则转换有效。
例如:
Full answer here