在 SQL 服务器中将 nvarchar 转换为 float 时出错

Error converting nvarchar to float in SQL Server

我想在我的SQL(hrs列声明为nvarchar)中查看前3个月的会话小时数,如果我需要将数据转换为float想查看最近 3 个月的数据,但出现一些错误

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

错误:

Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.

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

错误:

Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to 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
Error converting data type nvarchar to numeric.

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

错误:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '02:00:00 ' to data type int.

这四种方法我都试过了,都失败了,我需要怎么做?

首先,使用 date and time data types 作为日期时间值。您将避免这些和许多其他麻烦,还可以节省磁盘 space、RAM、减少读取次数等。

至于你的问题。对于 Sql 服务器 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