2011-10-24 26 views
1

在MySQL中,DESCRIBE table_name或SHOW COLUMNS FOR table_name的結果包含一個類型字段,浮點數,小數點和雙精度可以看作十進制(15,3)或十進制。浮點數和雙精度的情況如下。正則表達式來分析MySQL列類型的浮點數,小數點,雙精度值

我目前有:

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

如何需要修改這個正則表達式,使得(15,3)將是可選?

更新(2): 即使(15,3)是可選的,如果它們在那裏,我仍然需要捕獲這兩個值。添加?工作,但現在它沒有捕獲15和3.建議?

回答

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

環繞\((\d+),(\d+)\)部分與非捕獲組((?:))並使其可選(?)。

順便說一句:$到底是故意失蹤?

+0

不,我不知道我需要它。 –

+0

如果存在,我仍然需要捕獲可選部件。這是如何改變正則表達式的? –

+0

@NoahGoodrich如果存在這兩個數字,它們仍然被捕獲;) – NikiC

1

您只需要將?附加到您想要進行選擇的組。它意味着「最多一個」。所以,你將需要:

'/^(?:float|decimal|double)(\((\d+),(\d+)\))?/' 
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)

+0

我不能依賴直接讀取INFORMATION_SCHEMA的權限。 –

+0

INFORMATION_SCHEMA數據庫始終可以訪問。 – Devart

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

這將匹配您的兩個案例。據預計,要麼浮動,小數或雙單獨十進制(至少一位至少一位)

0

INFORMATION_SCHEMA信息數據庫是非常有用的,因爲它打破了信息。但是,訪問速度可能非常慢。在我的網絡主機上需要95秒!