首页 > 解决方案 > 如何在 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 子句中编写这个案例

标签: sqlsnowflake-cloud-data-platform

解决方案


问题是当我必须在 WHERE 子句中使用它时。

将年龄添加到dateofbirth替代中怎么样?

where dateadd(year, minage, dateofbirth) <= current_date and
      dateadd(year, maxage + 1, dateofbirth) > current_date

推荐阅读