【问题标题】:I am trying to select only the year portion of a timestamp in my sql query我试图在我的 sql 查询中只选择时间戳的年份部分
【发布时间】:2017-04-30 08:57:22
【问题描述】:

我试图在我的 sql 查询中只选择时间戳的年份部分。数据格式如下:

2016-12-13 23:59:58
2016-12-07 23:59:58
2016-12-01 23:59:58

例如,我希望我的查询结果只返回“2016”。

【问题讨论】:

  • 您使用的是什么数据库管理系统?你试过搜索吗?这很容易实现。
  • 在标准 SQL 中,这将是 extract(year from the_column)
  • SQL Server 将是 Year(YourColumn)DatePart(Year, YourColumn)。同样,这很容易在 Google 上找到。
  • 这是懒惰的。你本可以在谷歌上搜索并在几秒钟内得到答案。

标签: sql


【解决方案1】:

SQL 服务器

如果您遇到问题,请确保您的列实际上是一个时间戳,而不仅仅是一个字符串:

SELECT 
DATEPART(YEAR, CONVERT(DATETIME, '2016-12-13 23:59:58')) as YR
FROM TABLENAME

在您的实际查询中,您可能希望将'2016-12-13 23:59:58' 替换为列名。

SELECT 
DATEPART(YEAR, CONVERT(DATETIME, DateColumn)) as YR
FROM TABLENAME

甲骨文

SELECT 
EXTRACT(YEAR FROM (TO_DATE('2016-12-13 23:59:58', 'YYYY-MM-DD HH24:MI:SS') )) as YR
FROM TABLENAME

同样

SELECT 
EXTRACT(YEAR FROM (TO_DATE(DateColumn, 'YYYY-MM-DD HH24:MI:SS') )) as YR
FROM TABLENAME

【讨论】:

    【解决方案2】:

    在 Postgres 中有 date_part 函数可以完成这项工作。第一个参数是需要提取的部分,第二个参数是时间戳:

    示例: select date_part('year', timestamp '2001-02-16 20:38:40');

    更多详情:postgres documentation

    【讨论】:

      【解决方案3】:

      如果是 SQL Server,请执行

      SELECT DATEPART(year,'2016-12-13 23:59:58')
      

      您将获得 2016 年。如果是其他一些 RDBMS,可能类似。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-08-14
        • 2013-08-07
        • 2010-12-15
        • 2012-05-15
        • 2017-01-08
        • 1970-01-01
        • 2016-10-20
        • 2023-01-16
        • 2016-02-08
        相关资源
        最近更新 更多