Sql &引用;9.67609e和#x2B;008“;从表中插入数据时在临时表列中更新的值
我创建了一个临时表,并将数据插入其中。从临时表中获取数据后,booking number列的值更新为9.67609e+008。该列的数据类型设置为nvarchar。我应该得到967608505的输出Sql &引用;9.67609e和#x2B;008“;从表中插入数据时在临时表列中更新的值,sql,sql-server,Sql,Sql Server,我创建了一个临时表,并将数据插入其中。从临时表中获取数据后,booking number列的值更新为9.67609e+008。该列的数据类型设置为nvarchar。我应该得到967608505的输出 预期输出应输出为967608505您应使用INT数据类型来存储INT值: DECLARE @yourValue INT = 967608505 SELECT @yourValue 输出: 967608505 更新: 要存储数值,可以使用char、nchar和nvarchar或varchar。
预期输出应输出为967608505您应使用
INT
数据类型来存储INT
值:
DECLARE @yourValue INT = 967608505
SELECT @yourValue
输出:
967608505
更新:
要存储数值,可以使用char
、nchar
和nvarchar
或varchar
。
诸如char
、nchar
等类型用于非常小的值(例如2个字符)nvarchar
或varchar
用于存储较大的值
DECLARE @tbl TABLE
(
Foo nvarchar(50),
Bar nvarchar(50)
)
INSERT INTO @tbl
(
Foo
, Bar
)
VALUES
(N'967608505', '967608505' )
SELECT * FROM @tbl
输出:
Foo Bar
967608505 967608505
您的问题可能是输入数据类型。试试这个:
DECLARE @number FLOAT=967608505;
SELECT CAST(@number AS VARCHAR(100))
但是您可以通过使用INT
或BIGINT
SELECT CAST(CAST(@number AS BIGINT) AS VARCHAR(100))
在中,您将找到一些详细信息和链接,在这种情况下,
浮点值
默认用科学符号表示看起来您的输入数据实际上是实型
或浮点值
,因为对于这些类型,强制转换为VARCHAR
使用科学符号
您可以通过使用T-SQL或以下函数避免这种情况:
DECLARE @r REAL = 967608505 , @f FLOAT = 967608505
SELECT FORMAT(@r, '0') as [REAL-FMT] , FORMAT(@f, '0') as [FLOAT-FMT],
STR(@r ) as [REAL-STR] , STR(@f ) as [FLOAT-STR]
结果:
+-----------+-----------+-----------+-----------+
| REAL-FMT | FLOAT-FMT | REAL-STR | FLOAT-STR |
+-----------+-----------+-----------+-----------+
| 967608500 | 967608505 | 967608512 | 967608505 |
+-----------+-----------+-----------+-----------+
如您所见,REAL
值由于内部精度不足而存在最后一位问题
总之,我们可以得出结论,您的输入变量是(或应该是)FLOAT
,然后由您决定使用哪个函数
一个可能的陷阱是
STR()
产生右对齐的输出,并在左侧填充空格,可以通过执行LTRIM()来消除
使用适当的数据类型该列也可能包含字母数字值,因此设置为nvarchar@Sujay您更新或插入了什么值?967608505这是我插入的值,需要与输出相同的值。没有人可以调试未提供的代码。但如果列数据类型为nvarchar,则问题在于填充表中这些行的进程。该列包含数字和字母数字值,因此无法将数据类型声明为intI强烈不同意。。。您的方法仍然依赖于字符串方法的隐式理解。只要值实际上是一个整数,唯一干净的解决方案就是对目标类型进行强制转换,并在那里获取字符串形式。。。顺便说一句:FORMAT()
被认为是相当慢的,而STR()
可能会意外地填充(尝试DECLARE@n FLOAT=1.2;选择LEN(STR(@n))
),两者都可能隐式舍入。。。