2

我有一个包含 2 列的表“SomeTableName”:

1) 整串

2)TSP

在“WholeString”列中,我可以获得两种类型的字符串:

1) http://ads.jdtracker.com/?a=10515&c=19163&tsp=2974&s1=39827&s2=&s3=93885&s4=&s5=

2) TSP_2974_CTV_18933_HotGamesOnYourMobile

我必须创建触发器以从“WholeString”填充“TSP”列

“2974” - 是我必须放在 TSP 列中的值。

我的尝试:

CREATE OR REPLACE TRIGGER SomeTriggerName
  BEFORE INSERT OR UPDATE ON SomeTableName
  FOR EACH ROW

IF substr(WholeString, 1, [7]) = N'http://'
    NEW.TSP:=REGEXP_SUBSTR(WholeString, 'SomeRegexp')
IF substr(WholeString, 1, [4]) = N'TSP_'
    NEW.TSP:=REGEXP_SUBSTR(WholeString, '(?<=(tsp=|TSP_))\d{4}')
4

2 回答 2

2
CREATE OR REPLACE TRIGGER sometriggername
  BEFORE INSERT OR UPDATE ON sometablename FOR EACH ROW 
BEGIN
  :new.tsp := regexp_substr(:new.wholestring, '(tsp=|TSP_)(\d+)',1,1,'c',2);
END sometriggername;

正则表达式搜索tsp=TSP_,后跟一个或多个数字。而且您只希望报告第二组括号中的数字,因此是1,1,'c',2位。

于 2013-01-13T14:17:41.323 回答
1

在这里测试http://blog.logiclabz.com/tools/online-regex-checker.aspx

(?<=(tsp=|TSP_))\d{4}
于 2013-01-13T13:39:11.903 回答