【发布时间】:2014-04-21 18:19:32
【问题描述】:
我有一个类似于以下的 TERADATA 数据集:
Customer_ID | Targeting_Region
12 | targ=EU, targ=!Eu.Fr
34 | targ=Asia
56 | targ=!EU
“!”表示“不等于”。例如,第 1 行的客户想要定位欧盟,但排除法国。
我想创建一个字段来标记(带有“1”)任何存在“肯定”定位的行。通过“肯定”定位,我指的是明确包含特定区域的任何行(“否定”定位是明确排除某个区域的位置,例如在第 1 行中排除法国)。例如,第 1 行同时包含正面和负面定位,第 2 行仅包含正面定位,第 3 行仅包含负面定位。
我遇到的问题是一个简单的 case 语句不起作用(据我所知)。我尝试了以下两种说法:
(case when targeting_region like '%targ=%'; then 1 else 0 end) as target_flag
(case when ((targeting_region like '%targ=%';) and (targeting_region not like '%targ=!%';)) then 1 else 0 end) as target_flag
上面的第一条语句不起作用,因为它会为 'targ=' 和 'targ=! 都返回 1!
上面的第二条语句不起作用,因为它将为仅具有肯定定位的行返回 1。因此,第 1 行(上图)将返回 0(我希望它返回 1)
请注意,“targ=”后面的值也可以是数字。例如,'targ=12345'
关于如何实现这一点的任何想法?我听说 teradata 有一个叫做 regexp 的东西,但经过一番搜索后,我无法找到一个很好的解释。
谢谢!
【问题讨论】: