【发布时间】:2012-09-21 18:23:31
【问题描述】:
我有一个简单的数据集,如下表 1 所示。我想使用表 1 中的列生成两个新列(START_SHIFT_DT_TIME 和 END_SHIFT_DT_TIME)。所需的输出如表 2 所示。
要求是:
- 如果
START_SHIFT小时在 22:00:00 或之后开始,则实际开始日期为前一天。 - 如果
START_SHIFT小时在 22:00:00 之前开始,则实际开始日期为次日。
我正在使用 SQL 服务器。
表 1:
START_SHIFT END_SHIFT DATE
22:00:00 06:00:00 1/13/2012 12:00:00 AM
07:00:00 15:00:00 1/13/2012 12:00:00 AM
23:30:00 07:30:00 2/27/2012 12:00:00 AM
00:00:00 08:00:00 2/17/2012 12:00:00 AM
17:00:00 01:00:00 1/1/2012 12:00:00 AM
表 2:
START_SHIFT END_SHIFT DATE START_SHIFT_DT_TIME END_SHIFT_DT_TIME
22:00:00 06:00:00 1/13/2012 12:00:00 AM 1/12/2012 10:00:00 PM 1/13/2012 6:00:00 AM
07:00:00 15:00:00 1/13/2012 12:00:00 AM 1/13/2012 7:00:00 AM 1/13/2012 3:00:00 PM
23:30:00 07:30:00 2/27/2012 12:00:00 AM 2/26/2012 11:30:00 PM 2/27/2012 7:30:00 AM
00:00:00 08:00:00 2/17/2012 12:00:00 AM 2/17/2012 12:00:00 AM 2/17/2012 8:00:00 AM
17:00:00 01:00:00 1/1/2012 12:00:00 AM 1/1/2012 5:00:00 PM 1/2/2012 1:00:00 AM
【问题讨论】:
-
是的,SQL Server,但是哪个版本?另外,如果您有一些有效的查询,请发布它,不要紧是不正确的,是一个起点,也许您离解决方案不远。
-
@雅罗斯拉夫,感谢您的建议。我使用 SQL Sever 05/08。
-
然后重新标记您的问题,添加需要的问题;)
-
@Yaroslav - 您可以根据此信息进行建议的编辑。
-
你有什么理由不这样做;不简单地允许开始移位和结束移位都是 SQL 日期类型(包括 24 小时格式的时间),然后让你的应用程序代码处理以您选择的格式显示开始日期/时间和结束日期/时间?
标签: sql sql-server sql-server-2008 sql-server-2005