sql - 如何在 Snowflake 的 WHERE 子句中编写 CASE 语句
问题描述
我正在尝试重写一段最初为 Vertica 编写的 SQL 代码。Vertica 的AGE_IN_YEARS()
内置功能非常适合获取某人的年龄。但是,现在,我需要找到一种方法让它在 Snowflake 中工作,我做到了。
在 Snowflake中替换的等效语句AGE_IN_YEARS(DateOfBirth)
可以是:
case when dateadd(year, datediff(years, DateOfBirth, CURRENT_DATE), DateOfBirth) > CURRENT_DATE
then datediff(years, DateOfBirth, CURRENT_DATE) -1
else datediff(years, DateOfBirth, CURRENT_DATE)
end as AGE
问题是当我必须在 WHERE 子句中使用它时。原始 Vertica 代码为:
SELECT name, dob,
(SELECT AgeRangeCode
FROM AgeRangeTable
WHERE AGE_IN_YEARS(DateOfBirth) BETWEEN MinAge AND MaxAge) AS AgeRangeCode,
CURRENT_DATE as TODAY
from MemberInfoTable
如果我将AGE_IN_YEARS()
替换添加到上述查询中,我会得到
SQL 编译错误:无法评估不支持的子查询类型
我该如何在 WHERE 子句中编写这个案例
解决方案
问题是当我必须在 WHERE 子句中使用它时。
将年龄添加到dateofbirth
替代中怎么样?
where dateadd(year, minage, dateofbirth) <= current_date and
dateadd(year, maxage + 1, dateofbirth) > current_date
推荐阅读
- java - 在jsp中分离Java和HTML?
- python - 为什么 tweepy.Cursor 不应该返回空文件
- string - 如何用 Python 3 替换文本文件中字符串的所有实例?
- python - 如何按表示为字符串的日期时间正确排序字典?
- python - MLP 分类器神经元权重
- regex - 正则表达式 - 仅在没有分号时替换换行符
- c# - 使用 C# 赋值会创建对象的新副本还是使其成为别名?
- udp - 绑定套接字请求给出 EADDRNOTAVAIL
- javascript - 分离轴定理实现总是返回真。我究竟做错了什么?
- python - 计算从地球上某个位置看到的拉格朗日点的 RA DEC/AZ EL