sql - 使用 SQL 2005 尝试将 16 位 Varchar 转换为 Bigint 错误转换

标签 sql sql-server-2005 types

首先,感谢您的帮助!您确实有所作为,我非常感激。

所以我有一个 Varchar 列,它包含一个 16 位数字,例如:1000550152872026

select *
FROM Orders 
where isnumeric([ord_no]) = 0

returns: 0 rows


select cast([ord_no] as bigint)
FROM Progression_PreCall_Orders o
order by [ord_no]

returns: Error converting data type varchar to bigint.

如何将这个 16 位数字转换为数学数据类型,以便我可以从中添加和减去另一列?

更新:发现科学记数法存储为 varchar ex:1.00054E+15

那么我如何将其转换回数字?

最佳答案

DECIMAL 数据类型似乎工作正常:

DECLARE @myVarchar AS VARCHAR(32)
SET @myVarchar = '1000550152872026'

DECLARE @myDecimal AS DECIMAL(38,0)
SET @myDecimal = CAST(@myVarchar AS DECIMAL(38,0))
SELECT @myDecimal + 1

此外,这里有一个简单示例,其中 IsNumeric 返回 1 但转换为 DECIMAL 失败:

DECLARE @myVarchar AS VARCHAR(32)
SET @myVarchar = '1000550152872026E10'
SELECT ISNUMERIC(@myVarchar)

DECLARE @myDecimal AS DECIMAL(38,0)
SET @myDecimal = CAST(@myVarchar AS DECIMAL(38,0)) --This statement will fail

编辑
如果您正在处理以科学计数法编写的值,您可以尝试CONVERT 转换为 float :

DECLARE @Orders AS TABLE(OrderNum NVARCHAR(64), [Date] DATETIME)
INSERT INTO @Orders VALUES('100055015287202', GETDATE())
INSERT INTO @Orders VALUES('100055015287203', GETDATE())
INSERT INTO @Orders VALUES('1.00055015287E+15', GETDATE()) --sci notation

SELECT 
    CONVERT(FLOAT, OrderNum, 2) + 
    CAST(REPLACE(CONVERT(VARCHAR(10), GETDATE(), 120), '-', '') AS FLOAT)
FROM @Orders

关于sql - 使用 SQL 2005 尝试将 16 位 Varchar 转换为 Bigint 错误转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260602/

相关文章:

c# - 泛型方法的可为空参数类型 <T>?

types - 向 Agda 证明我们在谈论同一件事

c# - 在我的应用程序中获取打开的连接字符串数

sql - IN 子查询的 WHERE 条件影响主查询——这是一个特性还是一个错误?

sql-server - 列出 SQL Server 2005 中哪些列具有全文索引

sql - 在 SQL Server Management Studio 中调试存储过程

types - Coq - 从匹配语句中获取相等性

sql - Raiserror 中的断线

sql - 行组内的ssrs列可见性

sql - 使用 INSERT INTO 插入多个值 (SQL Server 2005)