【问题标题】:SQL query for extracting year from a date从日期中提取年份的 SQL 查询
【发布时间】:2012-11-07 11:19:12
【问题描述】:

我正在尝试创建一个仅从选定日期获取年份的查询。 IE。 select ASOFDATE from PSASOFDATE; 返回11/15/2012,但我只想要2012。我怎样才能只得到年份?我知道YEAR 函数可以使用,但我不确定如何使用。

【问题讨论】:

标签: sql oracle toad peoplesoft


【解决方案1】:

这对我有用:

SELECT EXTRACT(YEAR FROM ASOFDATE) FROM PSASOFDATE;

【讨论】:

    【解决方案2】:

    这个怎么样?

    SELECT TO_CHAR(ASOFDATE, 'YYYY') FROM PSASOFDATE
    

    【讨论】:

    • 它返回一个字符串而不是一个数字,坏主意
    • @Juan 我同意你的看法,Juan。好答案。当您始终使用 4 位数年份时,完全可以使用字符串。如果您添加了日期和/或月份并且想要排序,请按日期列本身或使用 'YYYY/MM/DD' 或类似格式的 to_char 字符串排序以获得正确的顺序。
    【解决方案3】:

    只需将 columnName 作为YEAR 的参数传递

    SELECT YEAR(ASOFDATE) from PSASOFDATE;
    

    另一种是使用DATE_FORMAT

    SELECT DATE_FORMAT(ASOFDATE, '%Y') from PSASOFDATE;
    

    更新 1

    我敢打赌,值是 varchar,格式为 MM/dd/YYYY,就是这样,

    SELECT YEAR(STR_TO_DATE('11/15/2012', '%m/%d/%Y'));
    

    如果所有查询都失败,则最后的手段

    使用SUBSTRING

    SELECT SUBSTRING('11/15/2012', 7, 4)
    

    【讨论】:

    • 第二个使用DATE_FORMAT怎么样?
    • ASOFDATE的数据类型是什么?值的格式如何?
    • 第二个查询显示相同的错误。我不确定数据类型是什么..让我试着把它拉起来..
    • @StackOver 我更新了答案,看看小提琴的结果。
    • @StackOver 看到我更新的答案,你的日期格式是M/d/Y 对吗?尝试将其转换回日期。
    【解决方案4】:

    SELECT date_column_name FROM table_name WHERE EXTRACT(YEAR FROM date_column_name) = 2020

    【讨论】:

      【解决方案5】:

      编辑:由于 post-tag 'oracle',前两个查询变得无关紧要,将第三个查询留给 oracle。

      对于 MySQL:

      SELECT YEAR(ASOFDATE) FROM PASOFDATE
      

      编辑: 无论如何,如果您的日期是字符串,让我们将其转换为适当的日期格式。并从中选择年份。

      SELECT YEAR(STR_TO_DATE(ASOFDATE, '%d-%b-%Y')) FROM PSASOFDATE
      

      既然你在尝试Toad,你能检查一下下面的代码吗:

      对于甲骨文:

      SELECT EXTRACT (TO_DATE(YEAR, 'MM/DD/YY') FROM ASOFDATE) FROM PSASOFDATE;
      

      Reference:

      【讨论】:

      • 为了让您更好地了解date, time related manupulations,也请查看此链接。希望从长远来看有帮助:)
      • 那是因为我拼错了你的表名我猜...你能试试DATE(date column) 和你正确的列名和表名:)
      • 查询到底是什么样的?
      • 抱歉,我断开了连接。看来您已投票支持 John Woo 的答案。那么它对你有用吗?坦率地说,深入研究您遇到的问题很重要。我更想知道您是否仍然收到错误,如果不是哪个答案解决了该问题并为您提供了正确的结果。
      • 前两个查询是针对 MySQL 的,第三个是针对 Oracle 的。由于该问题被标记为oracle,这是相当具有误导性的,应该在问题中明确说明。
      猜你喜欢
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多