Sql server 在SQL Server中将nvarchar转换为浮点时出错

Sql server 在SQL Server中将nvarchar转换为浮点时出错,sql-server,converter,type-conversion,Sql Server,Converter,Type Conversion,我想在我的SQL中查看前3个月的会话时间(hrs列声明为nvarchar),如果我想查看前3个月的数据,但我遇到一些错误,我需要将数据转换为float SELECT sum(convert(float, hrs)) FROM companysonvinunitvenue WHERE date >= DATEADD(day, -90, GETDATE()) 错误: Msg 8114,第16级,第5状态,第1行 将数据类型nvarchar转换为浮点时出错 错误: Msg 8114,第16级,

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

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

Msg 8114,第16级,第5状态,第1行
将数据类型nvarchar转换为浮点时出错

错误:

Msg 8114,第16级,第5状态,第1行
将数据类型nvarchar转换为浮点时出错

错误:

Msg 8114,第16级,第5状态,第1行
将数据类型nvarchar转换为数字时出错

错误:

Msg 245,第16级,状态1,第1行
将nvarchar值“02:00:00”转换为数据类型int时,转换失败

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

首先,使用datetime值。您将避免这些和许多其他问题,还可以节省磁盘空间、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
如果
hrs
表示小时,那么它究竟为什么被定义为
nvarchar
??修复你有缺陷的设计-如果它是一个数值,那么它也需要这样存储!我会避免使用
float
,因为它不精确,而使用
decimal(p,s)
SELECT CAST(CAST (hrs AS int) AS INT)
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE()) 
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