例如:
SELECT ASCII(123) as'123',ASC('123') as '"123"',ASCII('abc')as '"abc"'
的返回值是 49 49 97
该函数返回的是字符表达式最左端字符的ASCII代码值
问题点:
1。ASCII(123) 的最左端是“1”,应该返回的是“1”呀,为什么是"49"?
2。ASCII('123') 的最左端是“'”,为什么是"49"?
3。ASCII('abc,) 的最左端是“'”,为什么是"97"?
ASCII
返回字符表达式最左端字符的 ASCII 代码值。
ASCII(123) 因为ASCII处理字符串,所以123转换成字符串,1的ASCII是49
后面的就不用说了,'是字符串的定界符,所以不在计算范围内
汉字的ascii码:
取高位的8位运算后除以256
移位操作不一定要用移位运算来做,可以利用除法,右移8位相当于除以256
比如"烫"字的高8位为204,低八位为204
declare @bytes binary(2)
set @bytes=convert(binary,'烫')
--低8位的10进制值
print 0x00FF & cast(@bytes as int)
--高8位的10进制值
print (0xFF00 & cast(@bytes as int))/256
--结果
204
204
测试
select char(204)+char(204)
--结果
----
烫
declare @bytes binary(2)
set @bytes=convert(binary,'安')
--低8位
print 0x00FF & cast(@bytes as int)
--高8位
print (0xFF00 & cast(@bytes as int))/256
--结果
178
176
select char(176)+char(178)
--结果
----
安
select unicode(N'大')
-----
22823
select Nchar(unicode(N'大'))
--------
大