OracleSQL查询两个日期间按月统计的患者支出数据实现方案
Oracle 医院患者月度支出统计SQL实现
核心查询语句
假设业务表实际名为HOSPITAL_BIZ(可替换为你的真实表名),CREATED_DATE为存储格式dd/mm/yyyy的字符串类型字段,查询语句如下:
SELECT TO_CHAR(TRUNC(TO_DATE(CREATED_DATE, 'dd/mm/yyyy'), 'MM'), 'MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN') AS MONTH, SUM(PT_EXP) AS PT_Expen FROM HOSPITAL_BIZ WHERE TO_DATE(CREATED_DATE, 'dd/mm/yyyy') BETWEEN TO_DATE(:START_INPUT_DATE, 'dd/mm/yyyy') AND TO_DATE(:END_INPUT_DATE, 'dd/mm/yyyy') GROUP BY TRUNC(TO_DATE(CREATED_DATE, 'dd/mm/yyyy'), 'MM') ORDER BY TRUNC(TO_DATE(CREATED_DATE, 'dd/mm/yyyy'), 'MM');
注意事项
- 若CREATED_DATE是Oracle原生DATE类型,可去掉所有
TO_DATE(CREATED_DATE, 'dd/mm/yyyy')的转换逻辑,直接使用字段名即可 - 语句中的
:START_INPUT_DATE、:END_INPUT_DATE为输入参数,分别对应业务传入的起始日期、结束日期,格式要求为dd/mm/yyyy - 月份格式化时指定
NLS_DATE_LANGUAGE = AMERICAN是为了保证输出为JAN、FEB这类英文月份缩写,避免数据库语言为中文时输出不符合要求的格式 - WHERE条件直接限定输入的日期范围,无需额外处理首尾月非整月的场景,会自动过滤范围外的日期数据,符合示例中3月仅统计到24日的要求
内容的提问来源于stack exchange,提问作者Shah
相关产品推荐
相关产品推荐

