2017-01-06 27 views
2

我需要PostgreSQL中或红移DB如何使用REGEXP SQL

例如使用REGEXP SQL从字符串中提取仅5位数字仅提取5从字符串位数,

f 34 123 54321 123456 

以上字符串应该返回

54321 

我能够从字符串只得到号码,但不仅是5位数字

select REGEXP_REPLACE('f 34 123 54321 123456', '[^0-9]') five_digit_number 
--returns 3412354321123456 

回答

2

使用regexp_matches

select regexp_matches('f 34 123 54321 123456','\y\d{5}\y','g') 

指定'g'国旗给你万一有字符串中不止一个5位数发生的所有比赛。

\y指定字边界。

对于Redshift,您可以使用regexp_substr

select REGEXP_SUBSTR('f 34 123 54321 123456', '(^|[^[:word:]]|[[:space:]])\\d{5}([^[:word:]]|[[:space:]]|$)') 
+0

我得到''错误:42883:功能regexp_matches( “未知”, “未知”)不exist''的Postgres – logan

+0

哪个版本是你吗? –

+0

我使用redshift db ... REGEXP_REPLACE工作,但不是这个 – logan