如何解决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 举报,一经查实,本站将立刻删除。