在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.建议?
答案 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;