如何在MySQL中获取变量的类型?

时间:2013-11-13 10:52:35

标签: mysql

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

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

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

返回1

有任何帮助吗?如何在MySQL中查明字符串是否包含小数以外的内容?感谢。

2 个答案:

答案 0 :(得分:1)

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

感谢。

答案 1 :(得分: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