sql - 日期 yyyy-mm 格式为整数
问题描述
我需要将当前月份减去一个月,然后将其转换为格式 yyyy-mm 并将其转换为整数。然后将其分配给一个变量,以便在 where 子句中进行下一次比较。
所以逻辑是这样的
- 今天是 20.03.2019(或任何日期和月份)
- 减法后是 01.02.2019
- 转换为 YYYY-MM 格式后为 201902
- 转换为整数后为 201902 整数
你能帮我在 Oracle 中使用 SQL 方法吗?
解决方案
您可以使用以下表达式:
to_number(to_char(trunc(add_months(sysdate, -1), 'MM'), 'YYYYMM'))
add_months(sysdate, -1)
为您提供一个月前的今天日期。
trunc(add_months(sysdate, -1), 'MM')
给你那个月的第一天,通过参数MM
to trunc()
。
将其to_char(trunc(sysdate, 'MM') - interval '1' month, 'YYYYMM')
转换为字符串'201902'
。
最后to_number(to_char(trunc(sysdate, 'MM') - interval '1' month, 'YYYYMM'))
将该字符串转换为数字。
截断步骤实际上并不是必需的,因为无论如何您都忽略了一天部分,但我已将其保留以匹配您第二步中显示的值。
您也可以这样做-在将当前月份截断到第一天后trunc(sysdate, 'MM') - interval '1' month
减去间隔。反过来,或者不截断,您可能会收到日期错误,例如如果在 7 月 31 日运行 - 因为没有 6 月 31 日。
例子:
select to_number(to_char(trunc(add_months(sysdate, -1), 'MM'), 'YYYYMM')) from dual;
TO_NUMBER(TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE,-1),'MM'),'YYYYMM'))
---------------------------------------------------------------
201902
select to_number(to_char(add_months(sysdate, -1), 'YYYYMM')) from dual;
TO_NUMBER(TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM'))
---------------------------------------------------
201902
select to_number(to_char(trunc(sysdate, 'MM') - interval '1' month, 'YYYYMM')) from dual;
TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-INTERVAL'1'MONTH,'YYYYMM'))
-----------------------------------------------------------------
201902
然后将其分配给一个变量,以便在 where 子句中进行下一次比较。
您可以直接在where
子句中使用该表达式。如果你将它包含在选择列表中,你可以给它一个列别名;但是您不能where
在同一查询级别的子句中引用该别名。您将需要使用子查询(内联视图)或 CTE - 或者只是重复完整的表达式。
推荐阅读
- c++ - 编写程序使用动态解决货币行问题
- javascript - 为什么我的悬停功能有效,但我的 onmouseleave 功能无效?(在控制台中调用该函数有效)
- node.js - Cordova Electron 应用程序,openFileDialog 事件
- python - 数据框列中存在的字典中键的映射值
- c# - 无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务
- php - ACF 归档 - 添加链接不起作用的按钮
- amazon-web-services - 使用 Elastic Beanstalk 在实例启动时运行 Windows Powershell 脚本
- complex-numbers - 要显示的复杂 h5 文件
- python - Folium 中的 FeatureGroup 图层控制 - 只有一个活动图层
- python - 未找到 Pytorch 有状态的 lstm 符号