2017-10-12 26 views
0

我需要从广告系列代码中提取日期和月份,但我的查询只返回NULL值。日历和月份总是遵循'mmmdd'的格式(例如,aug23,sep12,oct09),尽管广告系列值总长度有所不同。REGEX_SUBSTR红移

示例查询:

SELECT Campaign, 
     Year, 
     REGEXP_SUBSTR(campaign, '[a-z]{3}\d{2}') AS Month_Day 

FROM GA_CAMPAIGN 

样品表:

Campaign           | Year | Month_Day 
TL-17-push-general-sep15septemberhighlights-0-0-0- | 17 | NULL 
FA-17-stoke-aug09augusthighlights-0-0-0-0-0  | 17 | NULL 

所需的输出:

Campaign           | Year | Month_Day 
TL-17-push-general-sep15septemberhighlights-0-0-0- | 17 | sep15 
FA-17-stoke-aug09augusthighlights-0-0-0-0-0  | 17 | aug09 

预先感谢您!

+0

您可以使用redshift python UDF来完全解决这个问题。如果没有人提出正则表达式解决方案,我会帮你解决这个问题。 –

回答

1

\d不像您期望的那样工作。请尝试使用[0-9]

WITH sample AS (
      SELECT 'TL-17-push-general-sep15septemberhighlights-0-0-0' campaign 
UNION ALL SELECT 'FA-17-stoke-aug09augusthighlights-0-0-0-0-0'  campaign 
) 
SELECT campaign, 
     REGEXP_SUBSTR(campaign, '[a-z]{3}[0-9]{2}') AS Month_Day 
FROM sample 
; 
--      campaign      | month_day 
-----------------------------------------------------+----------- 
-- TL-17-push-general-sep15septemberhighlights-0-0-0 | sep15 
-- FA-17-stoke-aug09augusthighlights-0-0-0-0-0  | aug09 
+1

那个伎俩......谢谢! – izzy84