基础练习
– 第一步:获取13-1 左半部分的,并且将转换为数字
select CONVERT(int,LEFT(‘13-1’,2))
– 2 表示获取的长度
– CHARINDEX(’-’,‘13-1’)-1) 以字符-为目标查找-的下标位置,从开始,最终不需要-,减-1
select CONVERT(int,LEFT(‘13-1’,CHARINDEX(’-’,‘13-1’)-1))
返回结果 13
– 第二步 获取13-1 右半部分: 通过stuff
– stuff(字符串,起始位置,删除数量,替换后的字符)
select convert(int,(STUFF(‘13-2’,1,CHARINDEX(’-’,‘13-1’),’’)))
返回结果1
实现:
Room表的操作
USE MySchool
select * FROM ROOM
ORDER BY CONVERT(int,LEFT(RoomNum,CHARINDEX(’-’,RoomNum)-1)),
Convert(int,(STUFF(RoomNum,1,CHARINDEX(’-’,RoomNum),’’)))
具体分析过程如下:
将以上房间号RoomAddress按顺序查询展示。
思路 查询操作,用select语句;用order by进行排序
Select roomid,roomaddress from room
Orber by 左侧编号13到14的顺序,右侧在左侧基础上按顺序
具体实现:
前半部分:
先找到 - 的位置,取其左侧部分,然后使用 convert()转换为数字
1.1通过charindex获取 CHARINDEX(’-’, RoomAddress) 返回的是包含-字符的字符数量,如果不包含,则数量为CHARINDEX(’-’, RoomAddress)-1即可
1.2获取左侧字符的函数为LEFT(RoomAddress,字符数量),将1.1的表达式放入
即为LEFT(RoomAddress,CHARINDEX(’-’, RoomAddress)-1) 获取了-左侧的字符
1.3 通过convert()将获得的字符转换为整数CONVERT(int,字符)
完整的表达:
CONVERT(int, LEFT(RoomAddress, CHARINDEX(’-’, RoomAddress) - 1))
后半部分:
先找到 - 符号的位置,然后把从第1个位置起到该位置的全部字符替换为空字符串(需要忽略-前面的字符,只对-后面的数字排序),最后再使用convert()函数将其转换为数字。
2.1 找到 - 符号的位置 CHARINDEX(’-’, RoomAddress)
2.2 替换格式 STUFF(一串字符, 替换初始位置,替换结束位置,替换后的字符)
STUFF(RoomAddress,1,CHARINDEX(’-’, RoomAddress),’’)
2.3 将2.3得到的字符转换为整数,即完整的表达:
CONVERT(int,STUFF(RoomAddress,1,CHARINDEX(’-’, RoomAddress),’’)
SELECT RoomID, RoomAddress
FROM Room
ORDER BY CONVERT(int, LEFT(RoomAddress, CHARINDEX(’-’, RoomAddress) - 1)),
CONVERT(int, STUFF(RoomAddress, 1, CHARINDEX(’-’, RoomAddress), ‘’))