Sql server 如何在sql server中显示时间间隔
我有两个变量,存储时间范围。 我必须以这种格式显示时间间隔Sql server 如何在sql server中显示时间间隔,sql-server,Sql Server,我有两个变量,存储时间范围。 我必须以这种格式显示时间间隔 09:00:00 -- 09:30:00 09:30:00 -- 10:00:00 10:00:00 -- 10:30:00 10:30:00 -- 11:00:00 UpTO 05:00:00 -- 05:30:00 这是我的密码 无论如何,我的代码是工作,但寻找建议,以实现它的任何其他最好的方式 我的工作完成了。完整的sql语句如下 当您的代码在这里工作时,还有一种方法可以创建如下cte: DECLARE @Start
09:00:00 -- 09:30:00
09:30:00 -- 10:00:00
10:00:00 -- 10:30:00
10:30:00 -- 11:00:00
UpTO
05:00:00 -- 05:30:00
这是我的密码
无论如何,我的代码是工作,但寻找建议,以实现它的任何其他最好的方式
我的工作完成了。完整的sql语句如下
当您的代码在这里工作时,还有一种方法可以创建如下cte:
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH interval_cte(StartTime, EndTime) AS
(
SELECT @StartTime StartTime, DATEADD(mi, 30, @StartTime) EndTime
UNION ALL
SELECT EndTime, DATEADD(mi, 30, EndTime) FROM interval_cte
WHERE EndTime < @EndTime
)
SELECT * FROM interval_cte
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH time_cte(StartTime, EndTime) AS
(
SELECT CONVERT(varchar,@StartTime,108) StartTime, CONVERT(varchar,(DATEADD(mi, 30, @StartTime)),108) EndTime
UNION ALL
SELECT CONVERT(varchar,EndTime,108), CONVERT(varchar,(DATEADD(mi, 30, EndTime)),108) FROM time_cte
WHERE EndTime < @EndTime
)
SELECT * FROM time_cte
要仅获取时间间隔,即不包含日期部分,请尝试以下操作:
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH interval_cte(StartTime, EndTime) AS
(
SELECT @StartTime StartTime, DATEADD(mi, 30, @StartTime) EndTime
UNION ALL
SELECT EndTime, DATEADD(mi, 30, EndTime) FROM interval_cte
WHERE EndTime < @EndTime
)
SELECT * FROM interval_cte
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH time_cte(StartTime, EndTime) AS
(
SELECT CONVERT(varchar,@StartTime,108) StartTime, CONVERT(varchar,(DATEADD(mi, 30, @StartTime)),108) EndTime
UNION ALL
SELECT CONVERT(varchar,EndTime,108), CONVERT(varchar,(DATEADD(mi, 30, EndTime)),108) FROM time_cte
WHERE EndTime < @EndTime
)
SELECT * FROM time_cte
当您的代码在这里工作时,还有一种方法可以创建如下cte:
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH interval_cte(StartTime, EndTime) AS
(
SELECT @StartTime StartTime, DATEADD(mi, 30, @StartTime) EndTime
UNION ALL
SELECT EndTime, DATEADD(mi, 30, EndTime) FROM interval_cte
WHERE EndTime < @EndTime
)
SELECT * FROM interval_cte
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH time_cte(StartTime, EndTime) AS
(
SELECT CONVERT(varchar,@StartTime,108) StartTime, CONVERT(varchar,(DATEADD(mi, 30, @StartTime)),108) EndTime
UNION ALL
SELECT CONVERT(varchar,EndTime,108), CONVERT(varchar,(DATEADD(mi, 30, EndTime)),108) FROM time_cte
WHERE EndTime < @EndTime
)
SELECT * FROM time_cte
要仅获取时间间隔,即不包含日期部分,请尝试以下操作:
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH interval_cte(StartTime, EndTime) AS
(
SELECT @StartTime StartTime, DATEADD(mi, 30, @StartTime) EndTime
UNION ALL
SELECT EndTime, DATEADD(mi, 30, EndTime) FROM interval_cte
WHERE EndTime < @EndTime
)
SELECT * FROM interval_cte
DECLARE @StartTime DATETIME, @EndTime DATETIME
SELECT @StartTime = '09:00:00'
SELECT @EndTime = '17:30:00'
;WITH time_cte(StartTime, EndTime) AS
(
SELECT CONVERT(varchar,@StartTime,108) StartTime, CONVERT(varchar,(DATEADD(mi, 30, @StartTime)),108) EndTime
UNION ALL
SELECT CONVERT(varchar,EndTime,108), CONVERT(varchar,(DATEADD(mi, 30, EndTime)),108) FROM time_cte
WHERE EndTime < @EndTime
)
SELECT * FROM time_cte
如果您只是询问将9:30AM 10:00AM转换为09:00:00-10:00:00的格式,则只需将打印行更改为以下格式:
PRINT CONVERT(varchar,@StartTime,108)+ ' -- '+CONVERT(varchar,@InvTime,108)
如果您只是询问将9:30AM 10:00AM转换为09:00:00-10:00:00的格式,则只需将打印行更改为以下格式:
PRINT CONVERT(varchar,@StartTime,108)+ ' -- '+CONVERT(varchar,@InvTime,108)
一切都很好,但你的代码日期也显示出来了。我只需要打印hh;mm:ss。您需要在代码中使用这个CONVERTvarchar,@StartTime,108来只返回hh:mm:ss。@Thomas:-的确,这会给您想要的@托马斯:-更新了我的答案!这是生成序列的CTE的一个很好的示例。加上我的$0.02;在最终的SELECT*中进行转换更简洁,CPU效率更高,因此递归CTE仅使用日期时间而不是字符串表示。一切正常,但代码日期也显示出来。我只需要打印hh;mm:ss。您需要在代码中使用这个CONVERTvarchar,@StartTime,108来只返回hh:mm:ss。@Thomas:-的确,这会给您想要的@托马斯:-更新了我的答案!这是生成序列的CTE的一个很好的示例。加上我的$0.02;在最终的SELECT*中进行转换更简洁,CPU效率更高,因此递归CTE仅使用日期时间而不是字符串表示。