【发布时间】:2016-12-31 07:51:11
【问题描述】:
我想在我的 SQL 中查看前 3 个月的会话时间(hrs 列声明为nvarchar),如果我想查看最近 3 个月的数据,我需要将数据转换为浮点数,但是我遇到了一些错误
SELECT sum(convert(float, hrs))
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE())
错误:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 nvarchar 转换为浮点数时出错。
SELECT sum(cast(hrs as float))
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE())
错误:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 nvarchar 转换为浮点数时出错。
SELECT CAST(CAST (hrs AS NUMERIC(19,4)) AS INT)
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE())
错误:
消息 8114,第 16 级,状态 5,第 1 行
将数据类型 nvarchar 转换为数值时出错。
SELECT CAST(CAST (hrs AS int) AS INT)
FROM companysonvinunitvenue
WHERE date >= DATEADD(day, -90, GETDATE())
错误:
消息 245,第 16 级,状态 1,第 1 行
将 nvarchar 值“02:00:00”转换为数据类型 int 时转换失败。
我尝试了这四种方法,都失败了,我需要怎么做?
【问题讨论】:
-
如果
hrs表示Hours -- 那么到底为什么它被定义为nvarchar?修复您有缺陷的设计 - 如果它IS 是一个数值,那么它也需要被存储!我会避免float的不精确性,而是使用decimal(p,s)
标签: sql-server converter type-conversion