Sql 月的最后一天加入到第二个表
我需要得到上个月的最后一天,然后将其加入到另一个表中,以返回与日期相关的年/月列,但我正在努力实现我想要的 我试过:Sql 月的最后一天加入到第二个表,sql,oracle,Sql,Oracle,我需要得到上个月的最后一天,然后将其加入到另一个表中,以返回与日期相关的年/月列,但我正在努力实现我想要的 我试过: SELECT b.yrmonth, LAST_DAY(ADD_MONTHS(SYSDATE,-1)) DT FROM dual a INNER JOIN D_DAY b on DT = b.DT 年-月只返回表中的所有内容,而不是仅返回一行,因此任何帮助都将不胜感激 您的查询有效: SELECT b.yrmonth, 'some constant masking
SELECT b.yrmonth, LAST_DAY(ADD_MONTHS(SYSDATE,-1)) DT
FROM dual a
INNER JOIN D_DAY b on DT = b.DT
年-月只返回表中的所有内容,而不是仅返回一行,因此任何帮助都将不胜感激 您的查询有效:
SELECT b.yrmonth,
'some constant masking b.DT' DT
FROM dual a
INNER JOIN
D_DAY b
on ( b.DT = b.DT ) -- Always true
您不需要加入DUAL
表,并且需要在WHERE
子句中过滤您的表
如果DT
date列具有不同的时间分量:
SELECT yrmonth, dt
FROM D_DAY
WHERE DT >= TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))
AND DT < TRUNC(SYSDATE,'MM');
您不需要使用
dual
表联接。您只需在where
子句中添加条件即可:
select *
from D_DAY b
where TRUNC(b.DT) = TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1))
并将
date
(带时间)强制转换为date
,因为LAST\u DAY
函数返回date
(使用时间组件,如果您想检查日期,您需要在之前强制转换它。可能重复的@a_horse_,名称不重复。OP知道如何获取上个月的最后一天;问题在于加入条件。An会很有帮助。您不需要在日期数据类型上使用to_date
。LAST_DAY()
返回一个日期
数据类型,并且TO_DATE
接受一个字符串输入,因此Oracle必须隐式地执行TO_CHAR
并且有效地执行TO_DATE(TO_CHAR(LAST_DAY(…),NLS_DATE_格式),'DD-MON-YYYY')
。如果用户更改NLS\u DATE\u FORMAT
会话参数,使其与显式格式模型不匹配(或者当默认的NLS\u DATE\u FORMAT
可能在国家之间更改时,如果查询在国际上运行),则此操作将失败。我之所以添加此cast,是因为上一天()正在返回时间戳数据类型;如果您尝试检查它,则返回false:LAST_DAY(ADD_MONTHS(SYSDATE,-1))=to_date('30/09/2017','dd/MM/yyyyy')
它没有返回时间戳-它返回带有时间组件的日期(Oracledate
数据类型具有年/月/日/小时/分/秒组件)。如果不需要时间成分,则使用TRUNC
将其截断回午夜。使用to_DATE
并依赖隐式to_CHAR
是错误的解决方案。好的,我同意TRUNC更好,但仍然需要转换日期(带时间):)不过,感谢您的解释。'DD-MON-YYY'
不是trunc(datetime)
的有效格式模型。它必须是以下格式之一:
select *
from D_DAY b
where TRUNC(b.DT) = TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1))