我正在进行在线SQL练习,并尝试将一系列整数转换为二进制数,而不是前导0.所使用的数据库引擎是MS SQL Server。在SQL Server中将整数转换为二进制格式
以下是原始表:
trip_no
1100
1101
1123
1124
1145
1146
1181
1182
1187
1188
1195
1196
7771
7772
7773
7774
7775
7776
7777
7778
8881
8882
和正确的输出应该是这样的:
trip_no trip_no_bi
1100 10001001100
1101 10001001101
1123 10001100011
1124 10001100100
1145 10001111001
1146 10001111010
1181 10010011101
1182 10010011110
1187 10010100011
1188 10010100100
1195 10010101011
1196 10010101100
7771 1111001011011
7772 1111001011100
7773 1111001011101
7774 1111001011110
7775 1111001011111
7776 1111001100000
7777 1111001100001
7778 1111001100010
8881 10001010110001
8882 10001010110010
我试图用cast((trip_no) as varbinary)
语法,但结果却是怪异。例如,当我用cast()
功能转换1100
上锻炼的网页,它返回L
,剩下的输出是这样的:
trip_no
1100 L
1101 M
1123 c
1124 d
1145 y
1146 z
1181 ќ
1182 ћ
1187 Ј
1188 ¤
1195 «
1196 ¬
7771 [
7772 \
7773 ]
7774 ^
7775 _
7776 `
7777 a
7778 b
8881 "±
8882 "І
而当我想这在MS SQL Server Management Studio中,它返回:
trip_no trip_no_bi
1100 0x0000044C
1101 0x0000044D
1123 0x00000463
1124 0x00000464
1145 0x00000479
1146 0x0000047A
1181 0x0000049D
1182 0x0000049E
1187 0x000004A3
1188 0x000004A4
1195 0x000004AB
1196 0x000004AC
7771 0x00001E5B
7772 0x00001E5C
7773 0x00001E5D
7774 0x00001E5E
7775 0x00001E5F
7776 0x00001E60
7777 0x00001E61
7778 0x00001E62
8881 0x000022B1
8882 0x000022B2
我无法弄清楚这是怎么发生的。请帮忙。
与在这个环节要求的情况: SQL Server Convert integer to binary string
我没有要求的Cuz锻炼可重复使用的解决方案只允许一个步骤的解决方案...
由于问题提到期望的输出是its binary number representation (without leading zeroes)
,我想它是INT
或VARCHAR
。
也请忽略现在的领先0的东西,因为它很容易摆脱它。
我应该更清楚这个:看到了第一个答案之后,我意识到这个问题本质上是要求对一系列数字和字符串之间的转换,用公式来获得查询中的二进制数。我不认为它是要求二进制转换函数,但它要求“计算原始trip_no的二进制数,显示它并修剪前导0”。
[SQL Server的整数转换成二进制字符串(HTTP的可能重复: //堆栈溢出。com/questions/127116/sql-server-convert-integer-to-binary-string) –
这不是'前导零',它是Exadecimal的符号,前缀是“0x”。这里有两件事要记住:A)数据的实际数据类型B)SSMS对数据的可视表示。输出显示不指定数据类型 –
您在链接中提供的#1解决方案提供了一个可执行的查询进行转换。但我想知道是否可以通过一个声明进行转换。第二个对于这个目的来说太复杂了。 @RickS – malamoji