我上周在 SQL 课程中学习了如何将字符串转换为整数。我们为此使用的表是基于时区的,因此偏移量为“-5”小时。
为了做到这一点,我们必须将字符串转换为
DECIMAL
,然后转换为 SMALLINT。一旦我知道了这一点,事情就非常简单了,但这不是我的问题所在。
我很好奇的是为什么
SMALLINT
不会带负号,但小数却可以。根据规格,SMALLINT
仍然可以达到-32768。有谁知道这是否在所有编码语言中都存在,还是只是 SQL 特定的?以及不允许它被施放的原因。
我不明白你为什么要费心去选角?根据文档(参见本页表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
不,这就是我所说的(将 @s 声明为 nvarchar @s=-5
(50) = CAST(@s AS SMALL INT)
再次,您必须从小数开始转换,然后再转换为小整数。我询问该流程背后的底层代码。
比如其中一个字节是否保存数字是正数还是负数等...