You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中用CASE语句或更优方式标记指定日期范围的行?

SQL日期范围标记:CASE语句实现与替代方案

一、修正后的CASE语句实现

你原SQL存在语法问题:日期值未加引号会被数据库解析为除法运算(比如01/07/2022会被计算成小数),必须用单引号包裹日期,且建议用YYYY-MM-DD格式避免格式歧义。正确写法如下:

SELECT
  CASE WHEN a.date BETWEEN '2022-07-01' AND '2022-07-19' THEN 1 ELSE 0 END AS Flag
FROM
  dataset a

二、无需CASE语句的替代方案

不同SQL方言有更简洁的实现方式,核心是利用布尔表达式直接转换为数值:

1. MySQL/MariaDB

MySQL会自动将布尔值(TRUE/FALSE)转为1/0,直接用条件表达式即可:

SELECT
  (a.date BETWEEN '2022-07-01' AND '2022-07-19') AS Flag
FROM
  dataset a

2. PostgreSQL

需显式将布尔值转为整数:

-- 写法1
SELECT
  CAST(a.date BETWEEN '2022-07-01' AND '2022-07-19' AS INT) AS Flag
FROM
  dataset a

-- 写法2(更简洁)
SELECT
  (a.date BETWEEN '2022-07-01' AND '2022-07-19')::INT AS Flag
FROM
  dataset a

3. SQL Server

可使用IIF函数替代,或显式转换布尔值:

-- 方法1:IIF函数
SELECT
  IIF(a.date BETWEEN '2022-07-01' AND '2022-07-19', 1, 0) AS Flag
FROM
  dataset a

-- 方法2:转换布尔值
SELECT
  CONVERT(INT, a.date BETWEEN '2022-07-01' AND '2022-07-19') AS Flag
FROM
  dataset a

附表示例

IDDATE
101/07/2022
208/07/2022
301/08/2022
405/08/2022

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:48:06