【发布时间】:2021-04-27 22:58:34
【问题描述】:
我有一个CONTRACTOR_SCHEDULER 表。 “时间表”栏中的字母表示工作时间(m - 8:00-20:00,n - 20:00-8:00(第二天),d - 8:00-8:00(第二天),h-休假)。 (Name, Begin_date) 是独一无二的。
| Name | Schedule | Begin_date | End_date |
|---|---|---|---|
| John | nhmh | 2019-01-01 | 2019-01-08 |
| John | nnh | 2019-01-09 | 2019-01-25 |
| Kate | dh | 2019-01-01 | 2019-01-07 |
| Kate | mnhdh | 2019-01-08 | 2019-01-14 |
| Mike | nh | 2019-01-01 | 2019-02-01 |
| Mike | mh | 2019-02-02 | 2019-12-31 |
我需要一个 SQL Server 存储过程,它使用 CONTRACTOR_SCHEDULER 行创建新表 CONTRACTOR_WORK_DAY 的工作日(表中不显示休息日)。
例子:
第一行 - 约翰有时间表 nhm。第一个字母是 n 所以 begin_date - 2019-01-01 20:00,End_date - 2019-01-02 08:00。下一个字母是 h,请跳过它作为休息日。最后一个字母是 m 所以 begin_date - 2019-01-03 08:00,End_date - 2019-01-03 20:00。重复计划直到 2019-01-08 - 第一个表中的 end_date。
CONTRACTOR_SCHEDULER 第一行的表是:
| Name | Begin_date | End_date |
|---|---|---|
| John | 2019-01-01 20:00 | 2019-01-02 08:00 |
| John | 2019-01-03 08:00 | 2019-01-03 20:00 |
| John | 2019-01-05 20:00 | 2019-01-06 08:00 |
| John | 2019-01-08 08:00 | 2019-01-08 20:00 |
我在 python 中使用了一些循环调度字符串等,但无法弄清楚如何在 SQL Server 的 T-SQL 中执行此操作。
【问题讨论】:
-
您应该用四个位列 m、n、d 和 h 替换您的“Schedule”列。
-
@NicholasHunter - 有 5 个角色的凯特呢?还是恼人的 BobbyTables 可能有 21 个字符的时间表?
-
根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。请注意,SO 不是代码编写服务。如果您不知道从哪里开始,那么是时候访问教程和其他资源了。该站点用于解决您在尝试解决问题时遇到的特定技术问题。但它不是“我需要这个过程,请写它”。
-
OK,为班次单独的表,外键进入调度表。您当前的设计将是一个 PITA。
标签: sql sql-server tsql