我在表中有一列HHMMSS
。
与此类似:
SELECT convert(varchar, getdate(), 108)
我需要能够仅使用HH在MSSMS中进行查看,并将其转换为int。
示例 时间
11:08:11,
12:08:12
Int
11
,12
我已经尝试过此页面上的几种技巧,但找不到任何解决方法 https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/
答案 0 :(得分:4)
为什么不只使用DATEPART
?无需将值从datetime
转换为varchar
,然后再转换为int
。
SELECT DATEPART(HOUR, GETDATE());
编辑:另外,我强烈建议您始终确保在使用数据类型时声明长度,精度和小数位数。 SELECT CONVERT(varchar, GETDATE(), 108)
将在此处返回整个值,因为(在这种情况下)它将值转换为varchar(25)
,但是,不声明这些参数可以/确实会导致意外的行为。 < / p>
我看到很多问题,人们问“为什么这行不通?”因为它们的SP声明为CREATE PROC MyProc @String varchar AS ...
,或者它们的变量声明为DECLARE @MyVar nvarchar;
,所以在两种情况下,其长度都为1;因此它们的值会被截断。
编辑讽刺:不小于一个小时后... Substring function not comparing the output;看起来我需要订购一个新的水晶球。到底为什么不声明您的长度,精度或小数位数是个坏主意。
答案 1 :(得分:1)
一种可能是这样:
SELECT LEFT(convert(varchar, getdate(), 108),2)
答案 2 :(得分:0)
您可以使用stuff()
并进行对话:
select col, datepart(hh, cast(stuff(stuff(col, 3, 0, ':'), 6, 0, ':') as time(0)))
from table t;
这假设col
的时间为varchar
。