在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
原文:在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
在论坛中看到一个帖子,帖子中有一些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
-
------
-
1
-
2
-
3
-
4
-
5
-
6
-
-
(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 number
-
from test1 t,master..spt_values s
-
where s.number >=1
-
and s.type = 'P'
-
and SUBSTRING(','+t.number,s.number,1) = ','
-
/*
-
number
-
1
-
2
-
3
-
4
-
5
-
6
-
*/
2、非连续数字的范围
-
create table test2(number int)
-
insert into test2 values
-
(1),(2),(3),(4),(5),(7),(8),
-
(10),(11),(13),(15)
-
-
实现效果
-
number
-
---------------------
-
1~5
-
7~8
-
10~11
-
13
-
15
我的解法:
-
--2.非连续数字的间隔
-
create table test2(number int)
-
insert into test2 values
-
(1),(2),(3),(4),(5),(7),(8),
-
(10),(11),(13),(15)
-
-
-
;with t
-
as
-
(
-
select *,
-
row_number() over(order by number) rn
-
from 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 number
-
from t
-
group by number-rn
-
/*
-
number
-
1~5
-
7~8
-
10~11
-
13
-
15
-
*/
3、合并字符串
-
create table test4 (name varchar(10),mytype varchar(10),cj int )
-
-
insert into test4
-
values('张三','语文',83),
-
('张三','数学',65),
-
('张三','物理',85),
-
('李四','语文',73),
-
('李四','数学',69),
-
('李四','物理',93)
-
-
-
实现效果
-
name mytype 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 cj
-
from test4
-
group by name
-
/*
-
name mytype cj
-
李四 语文,数学,物理 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的长度
-
/*
-
t
-
3
-
*/
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 tb1
-
order by cast(replace(reserved,' KB','') as numeric) desc
6、随机返回指定个数的字符
写一个存储过程。输入参数@int,返回随机@int 个字母。如输入5个。返回随机5个字母。
我的解法:
-
--6.随机返回指定个数的字符
-
declare @int int
-
declare @str varchar(1000)
-
-
set @int = 5
-
set @str = ''
-
-
select @str = @str + char(ascii('A') + abs(checksum(newid())) % 26)
-
from master..spt_values
-
where type='P'
-
and number between 1 and @int
-
-
-
select @str
-
/*
-
EPOZQ
-
*/
在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)的更多相关文章
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- vue-router 使用query传参跳转了两次(首次带参数,跳转到了不带参数)
问题: 在做项目的过程中,使用query传参数,发现跳转过程中第一次有参数,但是路由马上又跳转了一次,然后 ?和它之后的参数都不见了 问题分析: 因为路由加载了两次 解决办法: ·1. 找到总的 la ...
- 蓝牙BLE: GATT Profile 简介(GATT 与 GAP)
一. 引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上.GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很 ...
- (转)Darknet模型与Tensorflow模型相互转换
目前darknet框架下的模型训练都是在C环境下训练的,难免较为晦涩,如果能将模型转换到Tensorflow环境下完成模型的训练,在将训练好的权重转为Darknet可以识别的权重部署到实际应用中.这样 ...
- win10下caffe+anaconda+python+Jupyter Notebooks安装流程
python3.5(推荐)或者python2.7 CUDA 8+ cuDNN5.1 python环境不能单独配置,必须先编译caffe,才能编译python环境. 下载caffe prebuild版本 ...
- MacOS 安装配置 Laravel
简单介绍: Laravel是一个用PHP编写的免费开源Web框架.它是由Taylor Otwell创作的,遵循MVC开发方法. 截至2015年3月,Laravel被认为是最流行的基于PHP的框架之一. ...
- ISO/IEC 9899:2011 条款6.4——词法元素
6.4 词法元素 1.token(标记): keyword(关键字) identifier(标识符) constant(常量) string-literal(字符串字面量) punctuator(标点 ...
- 一个兼容 node 与浏览器的模块写法
一个兼容 node 与浏览器的模块写法 // test.js (function (root, factory) { if (typeof define === 'function' &&am ...
- django 自定义 密码加密方式 及自定义验证方式
在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,但如果需要修改默认加密方式为md5,具体方法为: 在settings.p ...
- python通过socket实现多个连接并实现ssh功能详解
python通过socket实现多个连接并实现ssh功能详解 一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户 ...
- 【Leetcode_easy】840. Magic Squares In Grid
problem 840. Magic Squares In Grid solution: class Solution { public: int numMagicSquaresInside(vect ...
