2017-09-13 54 views
0

我试图教我一些SQL,并且不能找出最佳的方式做以下串联和定时2日期/时间字段一起

SELECT [BasicStartDateTime] 
    ,[BasicFinishTime] 
,cast (BasicStartDateTime as varchar(120)) + '-' + CAST(BasicFinishTime as varchar(7))as TimeBand 
FROM [DOCDPT].[main].[Tbl_WorkOrder] 
where BasicStartDateTime >'2017-01-01' 

这些都是我造成的列

BasicStartDateTime

2017-01-03 12:00:00.000 

BasicFinishTime

20:00:00.000 

TimeBand

Jan 3 2017 12:00PM-8:00PM 

理想我想最后一列(时间段)的说法12:00-20:00

我试图去首先是12:00pm-8:00Pm,然后我会担心二十四小时制后位

我一直在尝试使用转换和权在第一阶段的级联,但语法似乎永远不会工作。

+0

这里是一个伟大的地方开始。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

回答

1

如果2012+

应该注意的是格式()有一些伟大的功能,但它不知道作为一个演员。

Declare @YourTable Table ([BasicStartDateTime] datetime,[BasicFinishTime] datetime) 
Insert Into @YourTable Values 
('2017-01-03 12:00:00.000','2017-01-03 20:00:00.000') 

Select * 
     ,TimeBand = format(BasicStartDateTime,'HH:mm-')+format(BasicFinishTime,'HH:mm') 
From @YourTable 

返回

BasicStartDateTime  BasicFinishTime   TimeBand 
2017-01-03 12:00:00.000 2017-01-03 20:00:00.000 12:00-20:00 
0

试试这个:

LTRIM(RIGHT(CONVERT(VARCHAR(20), BasicStartDateTime, 100), 7)) + '-' + 
LTRIM(RIGHT(CONVERT(VARCHAR(20), cast(BasicFinishTime AS datetime), 100), 7)) 
0

使用convert()风格,并改变你basicfinishtimedatetime转换为varchar之前:

select 
    basicstartdatetime 
    , basicfinishtime 
    , timeband = convert(varchar(20), basicstartdatetime, 100) 
    +'-'+ltrim(right(convert(varchar(20), convert(datetime,basicfinishtime),100),7)) 
from tbl_workorder 

rextester演示:http://rextester.com/YDMCD58620

回报:

+---------------------+-----------------+----------------------------+ 
| basicstartdatetime | basicfinishtime |   timeband   | 
+---------------------+-----------------+----------------------------+ 
| 2017-01-03 12:00:00 | 20:00:00  | Jan 3 2017 12:00PM-8:00PM | 
+---------------------+-----------------+----------------------------+ 
+0

我试图从时间段中删除日期部分,但我我们将试着转换一下你的内容。我曾看过使用Ltrim/Rtrim,但我认为我读到只删除空白字符。 –

相关问题