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

SQL中Extract(year from 列)返回带一位小数年份,原因何在?

问题解决:提取年份返回带小数的数值

原因分析

你遇到的问题核心是数据库函数的返回类型定义:部分数据库(比如Hive、Spark SQL,或是特殊配置下的MySQL)中,extract(year ...)、YEAR()、DATEPART(year ...)这类函数默认返回浮点型(FLOAT/DOUBLE),而非整数类型,所以结果会显示为2019.0这类带小数的格式。哪怕你的字段是标准datetime类型,只要函数本身的返回类型是浮点型,就会出现这个情况。

解决办法

通过类型转换把结果转为整数即可,不同数据库的写法参考如下:

  • MySQL/PostgreSQL:
    SELECT CAST(extract(year from orders.OrderDate) AS INTEGER) AS order_year;
    -- 或者用YEAR函数转换
    SELECT CAST(YEAR(orders.OrderDate) AS UNSIGNED) AS order_year;
    
  • Hive/Spark SQL:
    SELECT cast(extract(year from orders.OrderDate) as int) AS order_year;
    -- 或者简化写法
    SELECT int(year(orders.OrderDate)) AS order_year;
    
  • SQL Server:
    SELECT CONVERT(INT, DATEPART(year, orders.OrderDate)) AS order_year;
    

如果上述转换仍无效,建议检查OrderDate字段是否被误存为带小数的高精度时间类型(比如timestamp(6)),但这种情况极少影响年份提取结果,优先尝试类型转换即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:08:10