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

PostgreSQL新手求助:如何在单查询中转换两个datetime为date

错误原因

你混淆了SQL不同子句的作用:

  • SELECT 子句的作用是定义查询最终返回的列,既可以选择原始表的字段,也可以写入计算、类型转换逻辑,列的别名(AS 别名)需要写在这个子句里
  • WHERE 子句的作用是按条件过滤行,不能在这里定义返回列、给列设置别名,你之前把转换逻辑和别名写在WHERE里不符合SQL语法规则,因此会执行报错。
正确实现代码

不需要额外加WHERE,直接把两个字段的日期转换逻辑都写在SELECT的字段列表里即可:

SELECT 
  start_time,
  end_time,
  CAST(start_time AS DATE) AS Start_Date,
  CAST(end_time AS DATE) AS End_Date
FROM baywheels_2017;

PostgreSQL支持更简洁的类型转换简写,用::date就能达到和CAST完全一致的效果:

SELECT 
  start_time,
  end_time,
  start_time::date AS Start_Date,
  end_time::date AS End_Date
FROM baywheels_2017;
扩展用法

如果你后续需要按提取出的日期做筛选,才需要用到WHERE子句,例如只查询开始日期为2017年7月1日的记录:

SELECT 
  start_time,
  end_time,
  start_time::date AS Start_Date,
  end_time::date AS End_Date
FROM baywheels_2017
WHERE start_time::date = '2017-07-01';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:24:31