首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间段的数据类型

问时间段的数据类型
EN

Stack Overflow用户
提问于 2013-01-21 07:33:32
回答 1查看 1.2K关注 0票数 0

我想在表列中插入时间段。例如:我有一个表,有7列,每列是一周中的某一天。是否可以创建作为员工工作时间段的数据类型?比方说从凌晨1点到8点或在24小时系统中。

如果没有,我该如何处理呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-21 09:54:04

如果您正在构建一个像营业时间这样的表,那么使用较少的列可能会更好。

代码语言:javascript
复制
create table business_hours (
  day_of_week char(3) not null unique
    check (day_of_week in ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')),
  start_time time not null,
  end_time time not null 
    check (end_time > start_time)
);

insert into business_hours values
('Mon', '09:00', '17:00'),
('Tue', '09:00', '17:00'),
('Wed', '09:00', '17:00'),
('Thu', '09:00', '17:00'),
('Fri', '09:00', '17:00'),
('Sat', '11:00', '15:00');

您可以将该表与一个日程表连接起来(或使用generate_series()动态创建一个日程表),以生成当前一周的营业时间。

代码语言:javascript
复制
select c.cal_date, bh.*
from calendar c
inner join business_hours bh on bh.day_of_week = c.day_of_week
where cal_date between '2013-01-20' and '2013-01-27'
order by cal_date

将这些数据排列到一个矩阵中是一个表示级问题。使用应用程序代码可以做到这一点。

可用于此类查询的最简单的日程表只有两列。(我的使用英语。您可以随意调整缩写,但它们必须与表“business_hours”中的缩写匹配。)

代码语言:javascript
复制
CREATE TABLE calendar
(
  cal_date date NOT NULL,
  day_of_week character(3) NOT NULL,
  CONSTRAINT cal_pkey PRIMARY KEY (cal_date),
  CONSTRAINT cal_dow_values CHECK (day_of_week = 
CASE
    WHEN date_part('dow', cal_date) = 0 THEN 'Sun'
    WHEN date_part('dow', cal_date) = 1 THEN 'Mon'
    WHEN date_part('dow', cal_date) = 2 THEN 'Tue'
    WHEN date_part('dow', cal_date) = 3 THEN 'Wed'
    WHEN date_part('dow', cal_date) = 4 THEN 'Thu'
    WHEN date_part('dow', cal_date) = 5 THEN 'Fri'
    WHEN date_part('dow', cal_date) = 6 THEN 'Sat'
    ELSE NULL
END)
);

CREATE INDEX ON calendar (day_of_week);

有许多不同的方法可以填充日程表--电子表格、PostgreSQL函数、生成CSV文件的脚本语言等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14430607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档