在Sql server中将Time值转换为Integer

时间:2015-12-29 12:07:22

标签: sql sql-server tsql

我需要将convert Time值转换为integer值。

例如:如果time值为'07:00 PM',我需要将convert改为19

我已尝试过以下查询来执行此操作。

select CAST(substring(CONVERT(varchar,convert(smalldatetime,'07:00 PM'),114), 1,2) as int) as VALUE

它返回所需的输出。但是big transactions的情况需要花费太多时间。谁能建议我一个替代解决方案(也许是一个简单的解决方案)?

我无法使用datepart(hour, 'timevalue')。因为有时间值'00:00 AM''00:00 PM'的数据通过转换错误.在这种情况下,我需要将值返回为0。“

6 个答案:

答案 0 :(得分:2)

您似乎想从当时提取小时。使用datepart()

select datepart(hour, timecol)

答案 1 :(得分:1)

尝试此查询

DECLARE @test_date DATETIME

SET @test_date = N'07:00 PM'

SELECT DATEPART(hh, @test_date)

答案 2 :(得分:1)

使用DATEPART()......

DECLARE @DATE DATETIME =  N'07:00 PM'

SELECT DATEPART(hh, @DATE)

答案 3 :(得分:1)

此示例假定:

A)您将时间存储为字符串。

B)格式始终 HH:MM AM / PM。

数据中的假设可能是非常危险的。特别是对于可能包含条纹值的大型数据集。如果可能的话,我会建议商店时间为TIME。这将允许您在SQL Server中使用许多日期/时间函数。它还将限制可以输入的值。

此示例使用以下示例数据:

样本数据

/* Example uses data below.
 */
DECLARE @Sample TABLE
    (
        TimeValue VARCHAR(8)
    )
;

INSERT INTO @Sample
    (
        TimeValue
    )
VALUES    
    ('00:00 AM'),
    ('07:00 AM'),
    ('07:00 PM')
;

因为格式是固定的,我们可以依赖前两个字符来包含小时,最后两个字符告诉我们是否正在处理AM或PM。

实施例

/* Using LEFT and RIGHT to read the text value.
 */
SELECT
    TimeValue,        
    LEFT(TimeValue, 2) + CASE WHEN RIGHT(TimeValue, 2) = 'PM' THEN 12 ELSE 0 END
FROM
    @Sample
;

答案 4 :(得分:1)

首先将12 HR格式转换为24 HR格式:

convert(char(5),cast('07:00 PM' as datetime),108)

然后使用DatePart函数:

select datepart(hour,
 convert(char(5),cast('07:00 PM' as datetime),108) )

答案 5 :(得分:0)

请检查link,您会明白这一点。