在SQL中使用正则表达式读取属性的值



我正在Snowflake上为特定字段中的字符串查找值。例如,我有一个名为col1的列,其中有两个值,如下所示

1. |LFD: |**Wed 07 Jul 2021**|
2. LFD & additional info

在第一条记录中,我们有字符串LFD的值,给出为2021年7月7日。但在第二排,我们并没有LFD的价值。

我尝试创建一个布尔标志,如下所示;

case when col1 ilike '%LFD%' then 0 else 1 end as LFD_missing_flag

有趣的是,它对两行都给出0,但对第二行给出1,对第一行给出0。预期输出

col1                              LFD_missing_flag
|LFD: |**Wed 07 Jul 2021**|   |      0

LFD & additional info.       |      1

由于在第二行中我们没有LFD的值,所以它应该是1,否则为0,如第一条记录所示。

修改沿着同一行,我有下面的一段文字;

|FIRMS Code: |**Unknown**|
|FIRMS Code: |**WAM7**|
|FIRMS Code: |WAM7|

在这种情况下,输出shd为;

col1                           FIRMS_flag
|FIRMS Code: |**Unknown**|        1
|FIRMS Code: |**WAM7**|.          0
|FIRMS Code: |WAM7|.              0

我可以得到帮助来修改我的逻辑,以便获得正确的输出吗?感谢

因此,如果两个输入字符串中似乎都有子字符串LFD,则搜索还不够,要得到结果的行也有:,因此我们可以添加:

SELECT 
column1
,column1 ilike '%lfd%' as _like
,column1 ilike '%lfd:%' as not_like
,(column1 not ilike '%lfd:%')::int as results_a
,iff(column1 ilike '%lfd:%', 0, 1) as results_b
,case when column1 ilike '%LFD:%' then 0 else 1 end as results_c
FROM VALUES
('|LFD: |**Wed 07 Jul 2021**|'),
('LFD & additional info')

它给出:

RESULTS_A真0假
COLUMN1_LIKENOT_LIKERESULTS_B
|LFD:|**2021年7月7日星期三**|0
LFD&附加信息11

相关内容

  • 没有找到相关文章

最新更新