在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
来源:互联网 发布:广电授权的网络机顶盒 编辑:程序博客网 时间:2024/04/27 01:15
在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性。
原帖的连接为:http://bbs.csdn.net/topics/390884161?page=1#post-398177057
下面是我的解法,供大家参考:
1、分拆字符串
create table test1 (number varchar(100))insert into test1 values ('1,2,3,4,5,6')希望结果:number------123456(6 行受影响)
我的解法:
--1.拆分字符串create table test1 (number varchar(100))insert into test1 values ('1,2,3,4,5,6')select --t.number, SUBSTRING(t.number, s.number ,CHARINDEX(',',t.number+',',s.number)-s.number) as numberfrom test1 t,master..spt_values swhere s.number >=1and s.type = 'P'and SUBSTRING(','+t.number,s.number,1) = ','/*number123456*/
2、非连续数字的范围
create table test2(number int)insert into test2 values (1),(2),(3),(4),(5),(7),(8),(10),(11),(13),(15)实现效果number---------------------1~57~810~111315
我的解法:
--2.非连续数字的间隔create table test2(number int)insert into test2 values (1),(2),(3),(4),(5),(7),(8),(10),(11),(13),(15);with tas(select *, row_number() over(order by number) rnfrom test2)select case when min(number)=max(number) then cast(min(number) as varchar) else cast(min(number) as varchar)+'~'+cast(max(number) as varchar) end as numberfrom tgroup by number-rn/*number1~57~810~111315*/
3、合并字符串
create table test4 (name varchar(10),mytype varchar(10),cj int )insert into test4 values('张三','语文',83),('张三','数学',65),('张三','物理',85),('李四','语文',73),('李四','数学',69),('李四','物理',93)实现效果namemytype cj张三语文,数学,物理83,65,85李四语文,数学,物理73,69,93
我的解法:
--3.合并字符串create table test4 (name varchar(10),mytype varchar(10),cj int )insert into test4 values('张三','语文',83),('张三','数学',65),('张三','物理',85),('李四','语文',73),('李四','数学',69),('李四','物理',93)select name, stuff((select ','+mytype from test4 t4 where t4.name = test4.name for xml path('')),1,1,'') as mytype, stuff((select ','+cast(cj as varchar) from test4 t4 where t4.name = test4.name for xml path('')),1,1,'') as cjfrom test4group by name/*namemytypecj李四语文,数学,物理73,69,93张三语文,数学,物理83,65,85*/
4、写一个函数,输入2个varchar参数@str1,@str2,返回字符串@str1 在@str2中出现的次数,@int.
如(@str2=’abcsaac',@str1='a') 返回3。
我的解法:
--4.串1在串2出现次数declare @str2 varchar(100)='abcsaac'declare @str1 varchar(10)='a'select (len(@str2) - len(replace(@str2,@str1,''))) / len(@str1) as t --这里需要除以字符串1的长度/*t3*/
5、查询所有表空间的大小,并按照从大到小排序。
我的解法:
--5.返回表的大小,按照从大到小排序create table tb1(name varchar(100),rows numeric,reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))exec sp_msforeachtable 'insert into tb1 exec sp_spaceused ''?'''select *from tb1order by cast(replace(reserved,' KB','') as numeric) desc
6、随机返回指定个数的字符
写一个存储过程。输入参数@int,返回随机@int 个字母。如输入5个。返回随机5个字母。
我的解法:
--6.随机返回指定个数的字符declare @int int declare @str varchar(1000)set @int = 5set @str = ''select @str = @str + char(ascii('A') + abs(checksum(newid())) % 26)from master..spt_values where type='P'and number between 1 and @intselect @str/*EPOZQ*/
0 0
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
- 在论坛中出现的比较难的sql问题:12(递归问题2 拆分字符串)
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
- 在论坛中出现的比较难的sql问题:25(字符串拆分3)
- 在论坛中出现的比较难的sql问题:26(动态行专列+合并字符串、补足行数)
- 在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串)
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
- 在论坛中出现的比较难的sql问题:35(时间间隔计算问题)
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
- 字符串问题---替换字符串中连续出现的指定字符串
- 在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )
- 在论坛中出现的比较难的sql问题:34(递归 获取连续值问题)
- 在论坛中出现的比较难的sql问题:23(随机填充问题)
- SQL拆分指定的数据,在将修改拆分的字符串,最后在合并字符串
- 获取字符串中最长的连续数字字符串或最长的非数字字符串
- 字符串中连续最长的数字字符串
- 在论坛中出现的比较难的sql问题:16(取一个字段中的数字)
- 关于字符串拆分,合并问题的整理
- angular模板加载
- 内页怎样优化才能有好排名
- Check Soduku Solution
- TCP中在发送的数据的ACK未回来前,能继续发送其他数据包吗?
- oracle的存储过程
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
- spring3源码编译学习
- POJ 1410 Intersection
- Sort Colors
- JavaScript函数式编程
- 为什么 我 的myeclipse调试的时候,有时鼠标放在变量上就显示变量值,有时就没有,提示不可以显示
- sicily1198
- 给基础学科唱些赞歌
- A*寻路