2014-02-13 55 views
0

我的朋友他们就像ummm具有特定格式的文件名应该写成像第一年(YY)然后是月(MM)然后是该序列号(SEQ)并存储在数据库中,并且我必须检查所有文件是否存在在同一年和同一个月所以...使用正则表达式检索子字符串?

我使用正则表达式来捕获这些部分来检查该概念...并感谢您的帮助 我使用where子句来过滤记录,然后我使用substr赶上这部分我告诉你这样的查询将是类似的东西..

Select substr(column_name1,4,4),substr(column_name1,0,2),substr(column_name1,2,2), 
    into seqvar,yearvar,dayvar 
    from table1 
where regex_like (FILENAME,'(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR) 

是最好的方式和最快的做这样的事情?

或使用类似条款insed正则表达式哪里cluase更好?

请如果你想只有你所提到的部分/组情况

+0

你想[1-9]来自'CDR - ([1-9] [0-9] {0,3})_ [0-9] {2} _ [0-9] {2} _的[0-9] {0,3} [0-9] {2} _ [0-9] {4} _UK1 \ .FCDR'?对 ? – aelor

+0

是的,这是它(Y) – user334560415

回答

0

所有的意见,使用此:

`/\((.*?)\)/` 

试试这个在您的萤火

var str = 'CDR-([1-9][0-9]{0,3})_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR'; 
var res = /\((.*?)\)/.exec(str); 
console.log(res[1]); 

会输出:[1-9][0-9]{0,3}

如果你想输出像([1-9][0-9]{0,3})

使用:/(\(.*?\))/

+0

我有大约一百万记录我想从所有这些部分,然后检查,如果这部分是连续的 – user334560415

+0

,所以我不能具体变量包含 – user334560415

0

由于Oracle不支持向前看符号,也许这将是easyer使用REGEXP_REPLACE

可能看起来像这样:

select regexp_replace(FILENAME, '(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR)', '\2') 
    from .... 
+0

[这是一个sqlfiddle演示]( http://www.sqlfiddle.com/#!4/5b952/3) –

+0

好吧,这将得到我谈到的SEQ部分,但我真正需要的是将该部分保存在变量或东西来使用该部分来检查如果它们是顺序的,那么这100万条记录会被记录下来,并从整个列表中获得缺失的数字如​​何? – user334560415

+0

我可能错过了一些东西,但1,500,000行如何能有4位数的序列?无论如何,为什么你不能在变量中保存值? 'SELECT regexp .... INTO your_variable FROM ...'。但你也可以有他的序列号的另一种观点,并留下外部加入你的查询 –

相关问题