在firebird选择过程中显示给定月份和年份中的所有日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在firebird选择过程中显示给定月份和年份中的所有日期相关的知识,希望对你有一定的参考价值。

我正在制作一个时间和出勤计划。

我有一个这个字段的表

  ATTEND_PK INTEGER NOT NULL,
  EMP VARCHAR,
  ATTEND_DATETIME TIMESTAMP,
  USER_PK SMALLINT,
  ATTEND_UPDATETIME TIMESTAMP);

这是样本数据

| ATTEND_PK  |     EMP       |      ATTEND_DATETIME       |
|     1      |    john       |     1/23/2018 7:00:00      |
|     2      |    john       |     1/23/2018 12:00:00     |
|     3      |    john       |     1/23/2018 13:00:00     |
|     4      |    john       |     1/23/2018 16:00:00     |
|     5      |    john       |     1/24/2018 7:30:00      |
|     6      |    john       |     1/24/2018 11:50:00     |
|     7      |    john       |     1/24/2018 13:20:00     |
|     8      |    john       |     1/24/2018 16:40:00     |

我想要的输出就是这个

 |   EMP    |    DATE     |    AM_IN   |   AM_OUT   |   AM_IN  |   AM_OUT   |
 |   john   |  1/1/2018   |     NULL   |    NULL    |   NULL   |    NULL    | 
 |   john   |  1/2/2018   |     NULL   |    NULL    |   NULL   |    NULL    |
 |   ....   |   .....     |     NULL   |    NULL    |   NULL   |    NULL    |
 |   john   |  1/23/2018  |   7:00:00  |  12:00:00  |  1:00:00 |   4:00:00  |
 |   john   |  1/23/2018  |   7:30:00  |  11:50:00  |  1:20:00 |   4:40:00  |
 |   ....   |   .....     |     NULL   |    NULL    |   NULL   |    NULL    |
 |   john   |  1/31/2018  |     NULL   |    NULL    |   NULL   |    NULL    |

我想要的输出的时间格式和我的数据是不同的,并显示给定月份和年份的完整日期

答案

您可以使用可选的存储过程解决此问题。

首先,这是一个列出一个月中的日期的过程:

create procedure days_in_month (y int, m int)
returns (d date) as
begin
  d = cast(y || '-' || m || '-01' as date);
  while (extract(month from d) = m) do
  begin
    suspend;
    d = d + 1;
  end
end

可以像这样调用

select * from days_in_month (2018, 1)

并将返回(在这种情况下)31行,其中包含2018年1月的所有日期。

问题文本中的表定义只是伪代码,因此我无法使用它来提供工作示例。但是使用真实数据表,您可以使用(左)连接语法(左侧是上面的days_in_month过程,另一侧是物理表)并使用Firebirds内置函数提取和案例,或者您可以使用把它全部放在存储过程中,这可能允许以更强制的方式编程。

以上是关于在firebird选择过程中显示给定月份和年份中的所有日期的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 日期选择器显示月份和年份菜单

如何仅在月份、日期和年份中更改我的日期选择器显示

android有月份选择器吗?或者怎么让日期选择器的日期不显示,只显示年份和月份

在jsp中如何实现加一个动态下拉框选择年份,并在当前页面显示相应的月份值?

EXTJS 5 - 仅日期选择器年份和月份

通过选择年份然后选择月份来显示存档