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
相关产品推荐
相关产品推荐

