oracle 找出右图中,id的申请和受理日期之间超过了10个工作日的id
时间: 2024-05-14 16:16:32 浏览: 187
对于这个问题,我建议您使用以下SQL查询语句:
```
SELECT id,申请日期,受理日期
FROM 申请表
WHERE (受理日期-申请日期) > 10
```
其中,申请表是指您存储申请和受理信息的表,id、申请日期和受理日期分别是该表中对应的字段名。
这个查询语句会找出申请和受理日期之间超过10个工作日的id,并返回它们的id、申请日期和受理日期。需要注意的是,这个查询语句只适用于受理日期和申请日期之间没有非工作日的情况。如果申请和受理日期之间有非工作日,则需要根据您具体的业务情况进行调整。
相关问题
oracle 查询两个日期之间的工作日
可以使用以下 SQL 查询语句来查询两个日期之间的工作日数量:
```
SELECT COUNT(*) AS workdays
FROM (
SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') + LEVEL - 1 AS date
FROM dual
CONNECT BY LEVEL <= TO_DATE('2022-01-31', 'YYYY-MM-DD') - TO_DATE('2022-01-01', 'YYYY-MM-DD') + 1
)
WHERE TO_CHAR(date, 'Dy') NOT IN ('Sat', 'Sun');
```
在这个查询语句中,我们首先使用 `CONNECT BY LEVEL` 来生成从起始日期到结束日期之间的所有日期。然后使用 `TO_CHAR(date, 'Dy')` 函数来获取每个日期对应的星期几,并排除周六和周日。最后,使用 `COUNT(*)` 函数来计算工作日数量。你可以将查询语句中的起始日期和结束日期替换为你需要查询的日期。
SQL 计算两个日期之间的非工作日
SQL本身并不直接支持计算两个日期之间的非工作日,因为它主要用于数据查询而非时间序列分析。不过,你可以通过编写自定义脚本或者结合其他功能来实现这个需求,例如使用数据库系统提供的函数(如Oracle的`TO_DATE`, `ADD_MONTHS`, 和 `WORKING_DAY`),或者利用程序语言(比如Python、Java等)配合日期处理库来完成。
假设你有一个包含工作日标记的表(比如一个布尔字段表示是否为工作日),你可以写出这样的查询:
```sql
SELECT a.date + ((b.end_date - a.date) - COUNT(*) OVER (ORDER BY a.date)) AS non_work_days
FROM (
SELECT t1.date, ROW_NUMBER() OVER (ORDER BY date) as rn
FROM your_table t1
JOIN your_table t2 ON t1.date <= t2.date AND t1.work_day = 0 AND t2.work_day = 1
) a
JOIN your_table b ON a.rn = b.rn
WHERE a.work_day = 0 AND b.work_day = 1
```
这里的关键点是找出连续的工作日序列,然后从每个工作日开始向后添加非工作日。这只是一个示例,并不一定适用于所有数据库,实际实现可能会因为数据库的不同而有所差异。
阅读全文