在SQL Server

时间:2016-12-31 07:51:11

标签: sql-server converter type-conversion

我想在我的SQL中查看前3个月的会话时间(hrs列声明为nvarchar),如果我想查看数据,我需要将数据转换为float过去3个月,但我收到了一些错误

SELECT sum(convert(float, hrs))
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE())

错误:

  

Msg 8114,Level 16,State 5,Line 1
  将数据类型nvarchar转换为float时出错。

SELECT sum(cast(hrs as float))
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE()) 

错误:

  

Msg 8114,Level 16,State 5,Line 1
  将数据类型nvarchar转换为float时出错。

SELECT CAST(CAST (hrs AS NUMERIC(19,4)) AS INT)
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE()) 

错误:

  

Msg 8114,Level 16,State 5,Line 1
  将数据类型nvarchar转换为数字时出错。

SELECT CAST(CAST (hrs AS int) AS INT)
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE()) 

错误:

  

Msg 245,Level 16,State 1,Line 1
  将nvarchar值'02:00:00'转换为数据类型int时,转换失败。

我尝试了这四种方法并且在所有方面都失败了,我需要怎样做?

1 个答案:

答案 0 :(得分:0)

首先,使用date and time data types作为日期时间值。而且你将避免这些和许多其他麻烦,并节省磁盘空间,RAM,减少读取次数等。

至于你的问题。对于Sql Server 2008 +

DECLARE @companysonvinunitvenue TABLE (hrs NVARCHAR(10))

INSERT @companysonvinunitvenue VALUES ('02:00:00'),('21:31:03')

SELECT DATEPART(HOUR,CAST(hrs AS time))
FROM @companysonvinunitvenue

对于其他版本

DECLARE @companysonvinunitvenue TABLE (hrs NVARCHAR(10))

INSERT @companysonvinunitvenue VALUES ('02:00:00'),('21:31:03')

SELECT cast(LEFT(hrs,2) AS INT)
FROM @companysonvinunitvenue