我想得到传入参数的一个月的第一天和最后一天。我试过了-
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'
3条答案
按热度按时间bnl4lu3b1#
你的逻辑有问题。您不需要将字符串转换为字符串。所以,我在想:
模式
MM
正在寻找一个数字月(您还有格式模式'DDMMYYYY'
两次询问;我不知道为什么。)碰巧oracle将年份默认为当前年份,将月份的日期默认为当前月份。所以,你甚至不需要乱动琴弦:
以上假设参数为一个数值。如果要处理字符串,则:
或:
如果要传递完整的月份名称,请使用
MONTH
而不是MON
.pnwntuvh2#
内心的呼唤
TO_CHAR()
这就是问题所在。只是使用TO_DATE()
如下所示,使用适当的格式说明符作为第二个参数:目前尚不清楚该参数是完整的月份名称还是缩写的月份名称(may在这方面模棱两可)。我以为是前者。如果这是一个简短的名字,那么使用
'DD MON YYYY'
相反。在您的查询中:
yi0zb3m43#
如果你需要的话
20200531
在where子句中,我想你需要