【问题标题】:First day of the month retrieval from SQL table with existing dates从具有现有日期的 SQL 表中检索每月的第一天
【发布时间】:2015-02-13 19:10:22
【问题描述】:

我有一个收集名为PARTS 的数据的数据库,其中一列名为TM_DLVRY。 TM_DLVRY 以这种格式存储所有交付日期:MM/DD/YYYY。我需要检索每个月的第一天以进行交货,因为我正在制作图表。

我尝试了以下方法:

SELECT TM_DLVRY
FROM PARTS
WHERE DATEFROMPARTS(Year(TM_DLVRY), Month(TM_DLVRY), 1) ;

我阅读了所有我能找到的与这个问题相似的其他问题,但没有一个能得到我想要的答案。

我不习惯在 SQL Developer 中编写 SQL,所有这些都来自 MS Access。以前,在 MS Access 中,我可以只使用 DateSerial( , , 1) 来获得它,但现在我必须为 SQL Developer 重写所有内容,而且我的起步很慢。建议?

【问题讨论】:

    标签: sql database ms-access oracle-sqldeveloper


    【解决方案1】:

    如果要将 TM_DLVRY 转换为当月的第一天,则需要将 DATEFROMPARTS 上移到 select 语句中。但实际上你甚至不需要那个。

    您还可以在该语句中进行一些数学/计数,例如尝试:

    SELECT to_char(TM_DLVRY,'yyyy') as Year, to_char(TM_DLVRY,'mm') as month, COUNT(TM_DLVRY) as monthly count
    FROM PARTS
    GROUP BY to_char(TM_DLVRY,'yyyy'), to_char(TM_DLVRY,'mm');
    

    【讨论】:

    • Oracle 说月份和日期无效
    【解决方案2】:
    SELECT TM_DLVRY
    FROM PARTS
    WHERE TM_DLVRY.Day=1;
    

    或

    SELECT TM_DLVRY
    FROM PARTS
    WHERE EXTRACT(DAY FROM TM_DLVRY)=1;
    

    这是您要找的吗? SQL 中的 WHERE 应该是某种等价语句。

    【讨论】:

    • 是的,这就是我想要的,但我试过了,但它不起作用。我不知道如何告诉 SQL 它需要以它所在的“时间戳”格式查找日期。
    • 也许 DAYOFMONTH() 代替
    • 是字符串值还是真实日期?
    • 我相信这是一个真实的日期
    • 如果是字符串,WHERE RIGHT(LEFT(T​​M_DLVRY,5),1)='1'
    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多