簡體   English   中英

SQL 查詢獲取當年參數中傳遞的月份的第一天

[英]SQL Query to get the first day of the month passed in the parameer of the current year

我想獲取參數中傳遞的月份的第一天和最后一天。 我嘗試了查詢-

select LAST_DAY(to_date(to_char(('01'||:P_MONTH||'2020'),'DDMMYYYY'),'YYYYMM'))
FROM DUAL

但它出錯了。

我想在查詢中使用它 -

select * from
GL_CODE_TAB
where effective_start_date = LAST_DAY(to_date(to_char(('01'||:P_MONTH||'2020'),'DDMMYYYY'),'YYYYMMDD'))

我想在我過去一個月的第一天/最后一天在表 GL_CODE_TAB 中搜索。

例如:- 如果我通過“五月”

select * from
GL_CODE_TAB
where effective_start_date = LAST_DAY(to_date(to_char(('01'||'May'||'2020'),'DDMMYYYY'),'YYYYMMDD'))

應該進行類似的搜索 -

 select * from
    GL_CODE_TAB
    where effective_start_date = '20200531'

TO_CHAR()的內部調用是問題所在。 只需按如下方式使用TO_DATE() ,並將正確的格式說明符作為第二個參數:

SELECT LAST_DAY(TO_DATE('01 ' || :P_MONTH || ' 2020'),'DD MONTH YYYY'))
FROM DUAL

尚不清楚該參數是完整的月份名稱還是縮寫的月份名稱(May 在這方面不明確)。 我以為是前者。 如果這是一個短名稱,請改用'DD MON YYYY'

在您的查詢中:

SELECT * 
FROM GL_CODE_TAB
WHERE effective_start_date = LAST_DAY(TO_DATE('01 ' || :P_MONTH || ' 2020'),'DD MONTH YYYY'))

你的邏輯有些不對勁。 您不需要將字符串轉換為字符串。 所以,我在想:

SELECT LAST_DAY(TO_DATE('01' || :P_MONTH || '2020', 'DDMMYYYY'))
FROM DUAL

模式MM正在尋找數字月份。 (您的查詢中還有兩次格式模式'DDMMYYYY' ;我不知道為什么。)

碰巧的是,Oracle 將年份默認為當年,將月份中的日期默認為當前月份。 所以,你甚至不需要弄亂字符串:

SELECT LAST_DAY(TO_DATE(:P_MONTH , 'MM'))
FROM DUAL;

以上假設您的參數有一個數值 如果要處理字符串,則:

SELECT LAST_DAY(TO_DATE('01' || :P_MONTH || '2020', 'DDMONYYYY'))
FROM DUAL

或者:

SELECT LAST_DAY(TO_DATE(:P_MONTH , 'MON'))
FROM DUAL;

如果要傳遞完整的月份名稱,請使用MONTH而不是MON

如果你需要20200531在 where 子句中,我想你想要

select to_char(last_day(to_date(('01'||'May'||'2020'),'DDMMYYYY')), 'YYYYMMDD')
from dual;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM