Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;9.67609e和#x2B;008“;从表中插入数据时在临时表列中更新的值_Sql_Sql Server - Fatal编程技术网

Sql &引用;9.67609e和#x2B;008“;从表中插入数据时在临时表列中更新的值

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。

我创建了一个临时表,并将数据插入其中。从临时表中获取数据后,booking number列的值更新为9.67609e+008。该列的数据类型设置为nvarchar。我应该得到967608505的输出


预期输出应输出为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))
),两者都可能隐式舍入。。。