我正在使用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分钟以外的任何时间。
答案 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()))