字符串转换为负整数 T-sql

问题描述 投票:0回答:2

我上周在 SQL 课程中学习了如何将字符串转换为整数。我们为此使用的表是基于时区的,因此偏移量为“-5”小时。

为了做到这一点,我们必须将字符串转换为

DECIMAL
,然后转换为 SMALLINT。一旦我知道了这一点,事情就非常简单了,但这不是我的问题所在。

我很好奇的是为什么

SMALLINT
不会带负号,但小数却可以。根据规格,
SMALLINT
仍然可以达到-32768。有谁知道这是否在所有编码语言中都存在,还是只是 SQL 特定的?以及不允许它被施放的原因。

t-sql type-conversion
2个回答
0
投票

我不明白你为什么要费心去选角?根据文档(参见本页表1/3),T-SQL支持varchar和smallint之间的隐式转换。

DECLARE @negative_varchar VARCHAR(10) = '-5'

DECLARE @negative_smallint SMALLINT = CONVERT(SMALLINT, @negative_varchar)

DECLARE @negative_smallint_implicit SMALLINT = @negative_varchar

SELECT @negative_varchar, @negative_smallint, @negative_smallint_implicit

产品

---------- ------ ------
-5         -5     -5

-1
投票

不,这就是我所说的(将 @s 声明为 nvarchar @s=-5

(50) = CAST(@s AS SMALL INT)

再次,您必须从小数开始转换,然后再转换为小整数。我询问该流程背后的底层代码。

比如其中一个字节是否保存数字是正数还是负数等...

© www.soinside.com 2019 - 2024. All rights reserved.