1

我正在尝试将包含十进制数字的表字段从 varchar(255) 更改为 decimal(12,2)。在我这样做之前,我想知道在这个过程中是否有信息会被删除:是否有任何行中该字段包含小数(12,2)以外的内容。

我很难过如何做到这一点。显然 PHP 中没有像 is_numeric() 这样的字符串函数。我已经尝试将该字段转换为十进制,然后将其与原始字符串进行比较,但即使对于明显不应该的情况,这也会返回 TRUE:

select ('abc' = convert('abc', decimal(12,2)));

返回 1

有什么帮助吗?如何在 MySQL 中找出字符串是否包含小数以外的内容?谢谢。

4

2 回答 2

1

愚蠢的我,我必须转换两次(十进制并返回字符),这使它工作:select('abc' = convert(convert('abc',decimal(12,2)),char(255))) ; 返回 0

谢谢。

于 2013-11-13T10:57:47.670 回答
0

如果要检查字符串是否实际上是浮点数,也可以使用正则表达式。以下正则表达式可以提供帮助:)

SELECT '31.23' REGEXP '^[[:digit:]]+([.period.][[:digit:]]+)?$'; # returns 1
SELECT '31' REGEXP '^[[:digit:]]+([.period.][[:digit:]]+)?$'; # returns 1
SELECT 'hey' REGEXP '^[[:digit:]]+([.period.][[:digit:]]+)?$'; # returns 0
于 2013-11-13T11:17:04.167 回答