需要部分日期

时间:2016-06-28 11:08:26

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我正在使用SQL Server 2008R2。 我试图在输出中获取日期的一部分,并且我的列是datetime数据类型。 例如, 如果当前日期和时间为2016-06-28 17:34:12.060,那么我需要将17:00输出为仅:00分钟的小时。

直到现在我都试过这个,

Select DateName(HH,SUBSTRING('2016-06-28 17:34:12.060',12,5)) +':00'

这给了我正确的输出。但是当我传递datetime数据类型的列名时,它会给出错误,

Select DateName(HH,SUBSTRING(TimeInHour,12,5)) +':00'

给出错误,

  

参数数据类型时间对于子字符串函数的参数1无效。

我知道我在错误的地方使用SUBSTRING(),但我真的不知道如何实现这一输出。 帮助将非常明显。我需要输出为HH:00,小时将是00分钟以外的任何时间。

5 个答案:

答案 0 :(得分:5)

为什么要使用substring()datename()的第二个参数应该是日期/时间数据类型。所以,就这样做:

Select DateName(hour, '2016-06-28 17:34:12.060') + ':00'

答案 1 :(得分:1)

试试这个:

Select CAST(DATEPART(hour,'2016-06-28 17:34:12.060') AS VARCHAR(2)) +':00'

答案 2 :(得分:1)

以下是可能有用的代码

SELECT CONVERT(VARCHAR(50),DATEPART(YY,'2016-06-28 17:34:12.060')) -- Year
SELECT CONVERT(VARCHAR(50),DATEPART(mm,'2016-06-28 17:34:12.060')) -- Month
SELECT CONVERT(VARCHAR(50),DATEPART(d,'2016-06-28 17:34:12.060'))  -- Day   
SELECT CONVERT(VARCHAR(50),DATEPART(HH,'2016-06-28 17:34:12.060'))+':00' -- Hour
SELECT CONVERT(VARCHAR(50),DATEPART(mi,'2016-06-28 17:34:12.060'))+':00' -- Minutes
SELECT CONVERT(VARCHAR(50),DATEPART(ss,'2016-06-28 17:34:12.060')) -- Seconds
SELECT CONVERT(VARCHAR(50),DATEPART(ms,'2016-06-28 17:34:12.060')) -- Millisecond

答案 3 :(得分:1)

您需要首先投射DATETIME类型列,使用 CAST 函数

Select DateName(HH,SUBSTRING(CAST(ColumnName AS VARCHAR(30)),12,5)) +':00'

或者替代方法是使用 LEFT CONVERT

SELECT LEFT(CONVERT(VARCHAR, ColumnName ,108),2)+':00'

答案 4 :(得分:0)

select convert(varchar, datepart(hour, getdate())) + ':' + convert(varchar, datepart(second, getdate()))