将hhmmss转换为int(HH转换为int)

时间:2019-01-24 10:11:00

标签: sql sql-server

我在表中有一列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/

3 个答案:

答案 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