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
但转换为十进制失败:
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
浮动如果你正在处理用科学计数法写的值:
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
这个查询是否返回任何内容:'SELECT * FROM Orders WHERE ord_no LIKE'%[^ 0-9]%''? – 2011-06-07 04:47:34
@Andriy M哇! 3k行! – CodingIsAwesome 2011-06-07 05:07:52