【问题标题】:I need to get month and year from dateColumn我需要从 dateColumn 获取月份和年份
【发布时间】:2020-06-10 14:01:26
【问题描述】:

我被这部分查询卡住了,我只需要从我的表中获取月份和年份。

为了说明情况,我尝试使用“TRUNC_DATE”,Oracle 给我一个错误,例如 ORA-00904: "DATE_TRUNC": 无效的标识符 sql 这条查询是从 Udacity 得到的,但是在 sql Developer 中好像不行。

当我尝试更深入地搜索时,我发现类似 convert(char(7), ia.invoice_date(), 120) yearMonth 之类的东西,它仍然无法正常工作并返回错误。 ORA-00936: 缺少表达式

我尝试了很多方法,但没有解决方案。

如果有人有什么想法可以提供帮助,我将不胜感激。

下面我粘贴查询的片段以获得指导帮助:

SELECT 
COUNT(ia.invoice_id) total_de_facturas,
SUM(ia.invoice_amount) monto_total,
convert(char(7), ia.invoice_date(), 120) yearMonth

来自 AP.ap_invoices_all ia GROUP BY ia.vendor_id;

【问题讨论】:

  • 你的意思是你想要一个月的第一天,仍然是一个日期数据类型;或年份和月份作为(比如说)数字;还是以特定方式格式化的字符串?

标签: sql oracle date


【解决方案1】:

您将 Oracle 语法与 Postgres (date_trunc()) 和 SQL Server (convert()) 混合使用。许多日期函数是特定于供应商的,因此您可以学习数据库的相关语法。

在 Oracle 中,您可以使用 trunc() 将日期截断为当月的第一天:

trunc(ia.invoice_date, 'mm')

【讨论】:

  • 谢谢,我会考虑的!
【解决方案2】:

使用 EXTRACT 函数,试试这些来测试它是如何工作的,并在你的查询中使用它 -

SELECT EXTRACT(YEAR FROM DATE '2020-03-07') FROM DUAL;
SELECT EXTRACT(MONTH FROM DATE '2020-03-07') FROM DUAL;

【讨论】:

    【解决方案3】:

    如果您想要一个 YYYY-MM 格式的字符串值 - 这似乎是 120 样式和 SQL Server 语法 convert() 调用中的 char(7) 的意图 - 那么您可以使用 to_char()该格式模型:

    to_char(ia.invoice_date, 'YYYY-MM') as yearMonth
    

    您不需要截断到月份的第一天,因为无论如何您都会丢弃一天部分。

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2010-12-19
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2023-03-29
      相关资源
      最近更新 更多