所有列上的 like 子句

Nir*_*rko 2 sql snowflake-cloud-data-platform

我想使用 like 子句来搜索一行中的所有列。就像是

SELECT * FROM test WHERE '%something%' IN *
Run Code Online (Sandbox Code Playgroud)

另外,我不知道我拥有的确切列,这就是为什么我需要通配符 (*)

有没有办法用雪花/SQL 做到这一点?

Gok*_*til 8

您可以考虑使用 array_construct 和 array_contains:

CREATE or REPLACE TABLE test ( id number, v varchar, z varchar )
as SELECT * FROM VALUES 
(1, 'Gokhan', 'Aylin'),
(2, 'Joe', 'Black');


SELECT *, ARRAY_CONSTRUCT( * ) combined 
FROM test where ARRAY_CONTAINS( 'Gokhan'::variant, combined  );
Run Code Online (Sandbox Code Playgroud)

您还可以将此数组转换为 varchar 以搜索部分匹配的字符串:

SELECT *, ARRAY_CONSTRUCT( * ) combined 
FROM test 
WHERE combined::VARCHAR LIKE '%Go%'; 

+----+--------+-------+------------------------+
| ID |   V    |   Z   | COMBINED               |
+----+--------+-------+------------------------+
|  1 | Gokhan | Aylin | [ 1, "Gokhan", "Aylin" |
+----+--------+-------+------------------------+
Run Code Online (Sandbox Code Playgroud)