首先,感谢您的帮助!您确实有所作为,我非常感激。
所以我有一个 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/