【问题标题】:Error converting nvarchar to float in SQL Server在 SQL Server 中将 nvarchar 转换为浮点数时出错
【发布时间】: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


【解决方案1】:

首先,使用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

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 2017-03-15
    • 2012-02-26
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2017-07-21
    • 2011-05-18
    相关资源
    最近更新 更多