sql查询以获取传入当前年份参数的月份的第一天

lp0sw83n  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(346)

我想得到传入参数的一个月的第一天和最后一天。我试过了-

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\u code\u选项卡中搜索我通过的月份的第一天/最后一天。
如果我通过“五月”

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'
bnl4lu3b

bnl4lu3b1#

你的逻辑有问题。您不需要将字符串转换为字符串。所以,我在想:

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 .

pnwntuvh

pnwntuvh2#

内心的呼唤 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'))
yi0zb3m4

yi0zb3m43#

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

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

相关问题