正则表达式解析浮点数,小数,双精度的MySQL列类型

时间:2011-10-24 14:37:13

标签: php mysql regex

在MySQL中,DESCRIBE table_name或SHOW COLUMNS FOR table_name的结果包含一个Type字段,对于浮点数,小数和双精度数可以看起来像十进制(15,3)或只是十进制。对于float和double也是如此。

我目前有:

'/^float|decimal|double(?:\((\d+),(\d+)\))?$/'

如何修改此正则表达式以使(15,3)可选?

更新(2): 即使(15,3)是可选的,我仍然需要捕获这两个值,如果它们在那里。添加?工作但现在它没有捕获15和3.建议?

6 个答案:

答案 0 :(得分:1)

您只需将?追加到您想要选择的群组即可。它意味着“至多一个”。所以你需要:

'/^(?:float|decimal|double)(\((\d+),(\d+)\))?/'

答案 1 :(得分:1)

'/^(?:float|decimal|double)(?:\((\d+),(\d+)\))?/'

使用非捕获组(\((\d+),(\d+)\))围绕(?:)部分并将其设为可选(?)。

顺便说一句:最后$是否故意丢失?

答案 2 :(得分:0)

尝试从information_schema.columns表中读取数据。

例如:

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM information_schema.columns;

DATA_TYPE返回 - 十进制

COLUMN_TYPE返回 - 小数(5,2)

答案 3 :(得分:0)

SELECT * FROM mytable WHERE mycolumn REGEXP "^(((float|decimal|double)(\\([[:digit:]]+,[[:digit:]]+\\))?))$";

这将符合您的两种情况。它预计浮点数,十进制或双重十进制(至少一位数至少一位数)

答案 4 :(得分:0)

INFORMATION_SCHEMA数据库非常有用,因为它会分解信息。但是,访问速度可能非常慢。在我的网络主机上需要95秒!

答案 5 :(得分:0)

也许这个博客可以帮助你!!!

http://qpassablog.blogspot.com.es/2014/02/expresiones-regulares-en-mysql.html

好的,抱歉给您带来不便。这是解决方案:

要检查字段值是否为十进制数,可以使用以下表达式

REGEXP' ^ [[:digit:]] +。{0,1} [[:digit:]] * $'

示例:选择' 3.222' REGEXP' ^ [[:digit:]] +。{0,1} [[:digit:]] * $'作为prueba;