sql - ClickHouse 中的枚举类型数组
问题描述
在ClickHouse 21.4中,我创建了一个包含枚举列数组的表:
CREATE TABLE test_array_enum (
id String,
fixation_at DateTime64(3, 'UTC'),
types Array(
Enum(
'FIRST_TYPE' = 1, 'SECOND_TYPE' = 2, 'THIRD_TYPE' = 3,
'FOURTH_TYPE' = 4
)
)
)
ENGINE = ReplacingMergeTree
ORDER BY (fixation_at, id);
填写一些数据:
INSERT INTO test_array_enum (id, fixation_at, types) VALUES ('1', now64(), []),
('2', now64(), ['FIRST_TYPE']),
('3', now64(), ['SECOND_TYPE', 'THIRD_TYPE']),
('4', now64(), ['FOURTH_TYPE']);
我想按类型列过滤数据,查询返回 0 行:
SELECT *
FROM test_array_enum
WHERE hasAny(types, ['SECOND_TYPE', 'THIRD_TYPE']);
它适用于 Int 值:
SELECT *
FROM test_array_enum
WHERE hasAny(types, [2, 3]);
有没有办法通过枚举的字符串值过滤数据?
解决方案
如果有道理,您可以使用 cast
SELECT *
FROM test_array_enum
WHERE hasAny(types, CAST(['SECOND_TYPE', 'THIRD_TYPE'], 'Array(Enum(\'FIRST_TYPE\' = 1, \'SECOND_TYPE\' = 2, \'THIRD_TYPE\' = 3, \'FOURTH_TYPE\' = 4))'))
推荐阅读
- excel - 当前面的单元格实际上没有改变值时停止重新计算公式
- python - 如何通过 dialogflow+python 创建代理?
- c# - 如何在没有实体框架的情况下将 .net 核心中的连接字符串连接到 Azure SQL?
- java - 延迟抓取 + Spring Security
- react-router-dom - REACT Router V6 无法在另一个 Router 内渲染 Router
- javascript - 不使用支付请求 API 更改 Apple Pay 中的货币
- css - 在 React 中使用样式组件在图标旁边显示文本
- javascript - 如何修复 react.js 中的“只能在函数组件的主体内调用挂钩”错误?
- powershell - 混合 Where-Object/ForEach-Object 语法
- go - 无法在 go 中导入包