我有一个包含2列的表“SomeTableName”:
1)WholeString
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}')
答案 0 :(得分: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
位。
答案 1 :(得分:1)
在这里测试http://blog.logiclabz.com/tools/online-regex-checker.aspx:
(?<=(tsp=|TSP_))\d{4}