sql - 以 dd/mm/yy 格式返回过去 6 个月的所有日期
问题描述
我希望从过去 6 个月的所有日子回来。
每个例子:
Column1
-------
01-OCT-18
30-SEP-18
29-SEP-18
........
01-APR-18
@TimBiegeleisen - 你的解决方案为我指明了正确的方向,所以你得到了分数。
@MT0 - 据我所知,“ADD_MONTHS”没有在 T-SQL 中使用,所以我认为有必要进行澄清。但感谢您提供更新的指针,将来不会这样做。
解决方案
这将为您提供过去 6 个月的所有日期(以您的示例中的格式):
查询 1:
SELECT TO_CHAR( SYSDATE - LEVEL + 1, 'DD-MON-RR' ) AS Column1
FROM DUAL
CONNECT BY SYSDATE - LEVEL + 1 >= ADD_MONTHS( SYSDATE, -6 )
结果:
| COLUMN1 |
|-----------|
| 11-OCT-18 |
| 10-OCT-18 |
| 09-OCT-18 |
...
| 13-APR-18 |
| 12-APR-18 |
| 11-APR-18 |
更新
这个想法是生成过去 6 个月的天数列表,并计算每个日期记录特定值的次数
Oracle 11g R2 模式设置:
创建一个包含多行不同日期的示例表:
CREATE TABLE table_name ( value ) AS
SELECT TRUNC( SYSDATE ) - 0 FROM DUAL CONNECT BY LEVEL <= 5
UNION ALL SELECT TRUNC( SYSDATE ) - 1 FROM DUAL CONNECT BY LEVEL <= 3
UNION ALL SELECT TRUNC( SYSDATE ) - 2 FROM DUAL CONNECT BY LEVEL <= 7
UNION ALL SELECT TRUNC( SYSDATE ) - 3 FROM DUAL CONNECT BY LEVEL <= 2
UNION ALL SELECT TRUNC( SYSDATE ) - 4 FROM DUAL CONNECT BY LEVEL <= 1
查询 1:
SELECT TO_CHAR( c.Column1, 'DD-MON-RR' ) AS Column1,
COUNT( t.value ) AS num_values_per_day
FROM (
SELECT TRUNC( SYSDATE ) - LEVEL + 1 AS Column1
FROM DUAL
CONNECT BY TRUNC( SYSDATE ) - LEVEL + 1 >= ADD_MONTHS( SYSDATE, -6 )
) c
LEFT OUTER JOIN table_name t
ON ( c.column1 = t.value )
GROUP BY c.Column1
ORDER BY c.Column1 DESC
结果:
| COLUMN1 | NUM_VALUES_PER_DAY |
|-----------|--------------------|
| 11-OCT-18 | 5 |
| 10-OCT-18 | 3 |
| 09-OCT-18 | 7 |
| 08-OCT-18 | 2 |
| 07-OCT-18 | 1 |
| 06-OCT-18 | 0 |
| 05-OCT-18 | 0 |
...
| 14-APR-18 | 0 |
| 13-APR-18 | 0 |
| 12-APR-18 | 0 |
推荐阅读
- r - %in% 有快捷方式吗?
- python - 在 python 中使用 step 进行块切片
- java - 是否可以在运行时使用 Spring Data 中的 MongoRepository 确定字段?
- jquery - 如何不使用“$.parseJSON”对我的数据进行排序
- excel - Range.TextToColumns 使用一次后输出不一致
- javascript - 在 React 中多次调用 hooks
- javascript - 如何使用 JavaScript 在滚动上为 3D 渲染设置动画?
- excel - 在 Excel 中创建按钮以调用 Sharepoint 页面的流行趋势
- android - 从位图转换为uri
- php - 使用 Laravel 使用 json_encode 将单词“booked”及时插入所选对