微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql contains() 有多个条件

如何解决sql contains() 有多个条件

我正在使用雪花数据库,我想编写包含多个条件,如下所示:

SELECT 
    CASE 
        WHEN CONTAINS(temp_CREATIVE_SIZE,'"480x320" OR "320x48"') THEN '320x480'
        WHEN CONTAINS(temp_CREATIVE_SIZE,'1024x768')  THEN '768x1024'
        WHEN CREATIVE_NAME ILIKE '%test%' THEN NULL
        WHEN CONTAINS(CREATIVE_NAME,'"interstitialvideo" OR "videointerstitial"') THEN '320x480'
        ELSE temp_CREATIVE_SIZE 
        END AS CREATIVE_SIZE
FROM my_schema

但是输出仍然给我 480x320 和 320x48。带有单个案例的 contains() 工作正常,这是多个案例不起作用。有没有我不知道的另一种写作方式?

解决方法

支持多种模式的替代方法是 LIKE ANY

代替:

WHEN CONTAINS(SIZE,'"480x320" OR "320x48"') THEN '320x480'
// doesn't work

你可以写:

WHEN SIZE LIKE ANY ('%480x320%','%320x48%') THEN '320x480'
// works

https://docs.snowflake.com/en/sql-reference/functions/like_any.html

,

CONTAINS 不是正则表达式,它比 ILIKE 快,因为它只是一个子字符串存在与否。

因此重新解决您的演示问题

SELECT size,CASE 
        WHEN CONTAINS(SIZE,'"480x320" OR "320x48"') THEN '320x480'
        WHEN CONTAINS(SIZE,'1024x768')  THEN '768x1024'
        WHEN size ILIKE '%test%' THEN NULL
        WHEN CONTAINS(size,'"interstitialvideo" OR "videointerstitial"') THEN '320x480'
        ELSE 'else_'||size 
        END AS CREATIVE_SIZE
FROM (VALUES ('a480x320'),('480x320a'),('a320x480'),('320x480a'),('3testa'),('1024x768a') v(size));

给出:

SIZE    CREATIVE_SIZE
a480x320    else_a480x320
480x320a    else_480x320a
a320x480    else_a320x480
320x480a    else_320x480a
3testa      null
1024x768a   768x1024

向您展示 OR 不起作用。

你想要什么或 CONTIANS 或只有两个 WHERE 子句

SELECT size,'480x320') THEN '320x480'
        WHEN CONTAINS(SIZE,'320x48') THEN '320x480'
        WHEN CONTAINS(SIZE,('1024x768a') v(size));

给出:

SIZE    CREATIVE_SIZE
a480x320    320x480
480x320a    320x480
a320x480    320x480
320x480a    320x480
3testa  
1024x768a   768x1024

或:

WHEN CONTAINS(SIZE,'480x320') OR CONTAINS(SIZE,'320x48') THEN '320x480'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。