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

Tsql 转换为负整数T-sql的字符串,tsql,Tsql,因此,我在上周的Sql课程中学习了如何将字符串转换为整数。我们用于此的表是基于时区的。所以它是-5小时的偏移量 为了做到这一点,我们必须将字符串转换为十进制,然后转换为SMALLINT。一旦我知道这一点,事情就很简单了,这不是我的问题所在 我好奇的是,为什么一个小整数不带负号,但小数可以带负号。根据规格,SMALLINT仍然可以达到-32768。那么,有人知道这是否在所有编码语言中都存在,还是仅仅是特定于SQL的?还有什么是不允许它施放的不,这就是我说的(声明@s为nvarchar @s=-5

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

为了做到这一点,我们必须将字符串转换为十进制,然后转换为SMALLINT。一旦我知道这一点,事情就很简单了,这不是我的问题所在


我好奇的是,为什么一个小整数不带负号,但小数可以带负号。根据规格,SMALLINT仍然可以达到-32768。那么,有人知道这是否在所有编码语言中都存在,还是仅仅是特定于SQL的?还有什么是不允许它施放的

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

(50)=施法(@s为小整数)

同样,您必须先从十进制数转换,然后再从小整数转换。我在询问进程背后的底层代码


例如,其中一个字节是否包含一个数字是正数还是负数等等。

我不明白您为什么要费心从一开始就进行任何转换?根据(见下页的表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

DECLARE@s SMALLINT=CAST('-5'作为SMALLINT)
对我很有效。很抱歉,这个答案完全无法理解?