t-sql建临时表,处理字符串

临时表|字符串

declare  @str1  varchar(100),  @str2  varchar(100),  @str3  varchar(100),@str  varchar(500)  
set  @str1=''aada,bbbf,ccc,''  
set  @str2=''ddd,aaaaaa,fdsa''  
set  @str3=''vvvvvv,aaabbbb''  
set  @str=''fds,bbbf,eee,ddd,fff,hhhfg,dddde''  
现在:  
把@str1拆分成aada,bbbf,ccc三个元素,其中bbbf在@str里出现过  
把@str2拆分成ddd,aaaaaa,fdsa三个元素,其中ddd在@str里也出现过  
把@str3拆分成vvvvvv,aaabbbb两个元素,但是没有任何元素在@str里出现过  
请问我怎么用程序实现这样一个结果  
其实实际问题是这样的  
我有一个数据表,里有个字段classid  
其中一条纪录的数据,比如是:aada,bbbf,ccc  
现在要得到这样一个结果集,将classid按照上面的拆分方式拆分,得到的数据,在@str里出现过(@str是外界传过来的一个参数)的记录找出来,请问我该怎么做?  
---------------------------------------------------------------  
 
declare  @str  varchar(500)  
 
set  @str=''fds,bbbf,eee,ddd,fff,hhhfg,dddde''  
 
create  table  你的表  (classid  varchar(100))  
insert  你的表  values(''aada,bbbf,ccc'')  
insert  你的表  values(''ddd,aaaaaa,fdsa'')  
insert  你的表  values(''vvvvvv,aaabbbb'')  
 
create  table  #临时表(a  varchar(100))  
declare  @aaa  varchar(8000)  
set  @aaa=''insert  #临时表  select  *  from  (select  ''''''+replace(@str,'','',''''''as  str  union  all  select  '''''')+'''''')  a''    
exec(@aaa)  
 
select  *  from  你的表  where  exists  (select  1  from  #临时表  where  '',''+你的表.classid+'',''  like  ''%,''+a+'',%'')  
go  
 
drop  table  你的表,#临时表  
---------------------------------------------------------------  
 
create  table  #t(  
id  varchar(10))  
declare  @str  varchar(300)  
set  @str=''fds,bbbf,eee,ddd,fff,hhhfg,dddde''  
declare  @i  int  
declare  @len  int  
set  @i  =  1  
set  @str=''fds,bbbf,eee,ddd,fff,hhhfg,dddde''+'',''  
while  @i  <  len(@str)  
begin  
   insert  #t  select  substring(@str,@i,charindex('','',@str,@i)-@i)  
   set  @i  =  charindex('','',@str,@i)+1  
end  
select  *  from  数据表  A,#t  B  where  charindex(B.id,  A.classid)  >  0  
 
 
---------------------------------------------------------------  
 
create  table  t  (classid  varchar(100))  
insert  t  values(''aada,bbbf,ccc'')  
insert  t  values(''ddd,aaaaaa,fdsa'')  
insert  t  values(''vvvvvv,aaabbbb'')  
 
 
 
 
declare  @str  varchar(500)  
 
set  @str=''fds,bbbf,eee,ddd,fff,hhhfg,dddde''  
 
select  top  500  identity(int,1,1)  as  id  into  #t  from  sysobjects    
 
select  distinct  A.*  from  t  A,  
(  select  substring('',''+string+'','',id+1,charindex('','','',''+string+'','',id+1)-id-1)  as  string    
   from  (select  @str  as  string)  B,#t  c    
   where  substring('',''+string+'','',id,8000)  like  '',_%'')  D  
where  charindex('',''+string+'','','',''+classid+'','')>0  
 
drop  table  #t  
 
把#t建成固定表,更快。
 

时间: 2025-01-20 12:56:37

t-sql建临时表,处理字符串的相关文章

SQL Server 临时表和表变量系列之选择篇

摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我们的终极目的,还是今天要讨论的话题,即当我们面对具体的业务场景的时候,该选择临时表还是表变量? 几种典型场景 以下是几种典型的场景,让我们看看到底该作何选择,以及做出最终选择的具体原因和考量. 存储过程嵌套 在SQL Server中,使用存储过程的好处显而易见,往往会节约存储过程执行计划编译时间,提高查询语句的执行效率.有时候,我们在构建存储过程多层次嵌套场景中,会有内层存储过程需要临时使用外

sql索引-sql建索引之后的查询时间提高不大

问题描述 sql建索引之后的查询时间提高不大 我的索引是创建在uid上面,uid是int类型的,我在网上看到有个帖子,1000万条数据查询处25万条数据,加了索引之后用了2秒.没用索引之前利用表扫描用了128秒.然后我在1000万条数据中查询24万条,用了索引之后只提升了2秒不到..求指导啊拜托大神教一教 解决方案 A)128秒和2秒的条件都不一样,没有可比性.B)索引可以保证性能不会很差.并不表示不建索引肯定会差,这受到数据量大小.碎片多少.缓存情况等各种影响,波动很大.你正好碰到表现比较好的

巧用SQL server临时表

SQL server临时表是经常需要用到的,下面就教您如何使用SQL server临时表解决防止用户重复登录问题,供您参考. 在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入. 可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录.但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将

SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨

   SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译 (recompile).那么引发存储过程重编译的条件有哪一些呢?下面罗列了一些导致重编译(recompile)的条件:     - 对查询所引用的表或视图进行更改(ALTER TABLE 和 ALTER VIEW).     - 对执行计划所使用的任何索引进行更改.     - 对执行计划所使用的统计信息进行更新,这些更新可能是从语句(如 UPDATE

sql建表时间输入格式问题

问题描述 sql建表时间输入格式问题 在SQL建表时如何把varchar2型的时间设置输入格式为YYYYMM.如:年月,ym varchar2(6)--200109格式. 解决方案 建触发器字段建议或者入库的时候格式化. 解决方案二: 不建议使用触发器,最好入库前弄好格式,或者使用默认格式,读取数据的时候格式化一下时间就行. 解决方案三: 要么写触发器,插入,更新都要要么通过程序控制 解决方案四: 我觉得还是入库前先弄好格式比较靠谱! 解决方案五: 还是写一个阻止非法时间格式输入的方法把

sql建表的时候是一张多字段的表好还是分开多张表好?

问题描述 sql建表的时候是一张多字段的表好还是分开多张表好? 比如用户信息中有用户在系统中的账号信息还有用户的真实信息,是应该把这些信息都存放在用户表中呢?还是分开建一张user表,一张user_info表? 请分析两者的优劣 解决方案 看你存放的内容有哪些,如果就是一般的字段信息,一张表就行.专业一点建两张表,用户表,用户信息表,通过用户id进行主外键关联即可. 设计的东西没有绝对的标准,关键还是在便于开发和扩展二者之间寻找平衡. 解决方案二: 这个问题怎么没有人回答? 解决方案三: 账号信

SQL Server 临时表和表变量系列之踢馆篇

摘要 在面对SQL Server选择使用临时表还是表变量作为数据暂存问题时,有一个非常重要的选择标准便是性能,两者对于查询语句和DML性能表现到底如何呢?我相信,很多人的认识是片面的,或者是错误的.这里以一篇引用率很高的文章来作为反面教材来纠正那些片面和错误的认识,我暂且称之为"踢馆". 背景 在研究临时表和表变量该如何选择的时候,一篇文章叫着SQL Server Temp Table vs Table Variable Performance Testing文章引用率是非常高的.通读

SQL Server 临时表和变量系列之对比篇

摘要 在SQL Server代码编写过程中,经常会有需要临时"暂存"一部分数据结果集,供上下文使用,这个时候,我们有两种选择,即临时表和表变量.这篇文章从以下几个方面来对临时表和表变量进行对比: 创建和析构方式 存储方式 作用域 对事务的支持 性能影响 创建和析构方式 临时表和表变量在创建和析构方式上是完全不一样的,在这一节,我们会从以下几点来看看他们的不同. 结构定义 索引创建 DDL 析构方式 结构定义 在上一篇文章SQL Server 临时表和变量系列之概念篇中

c#-如图,为什么DataSet从sql server获取的字符串数据带省略号?

问题描述 如图,为什么DataSet从sql server获取的字符串数据带省略号? 我要对数据内容进行判断,结果老是不符.后来断点调试,放大镜查看DataSet对象,如图,发现它有2列的值是带省略号的,这2列在sql server里的数据类型是 char(50).vchar(50).nvchar(50), 3种我都换过,但是程序运行后DataSet对象那里还是带省略号.怎么会出现这种情况呢 解决方案 是因为你数据库的字段长度比较大,虽然你只有两个字 实际上所占字符为你的字段长度,建议格式化,l

使用sql语句,去掉字符串里面的多个括号中的字符串

问题描述 使用sql语句,去掉字符串里面的多个括号中的字符串 比如说,源串是 adgdg[ewrerw]fdafda[2323][244]fdfd, 希望执行语句后得到的是 adgdgfdafdafdfd,即去包含[]以及内部的字符串,这个SQL该怎么写呢? 解决方案 SELECT REGEXP_REPLACE('adgdg[ewrerw]fdafda[2323][244]fdfd','([(.*?)])', '' ) FROM DUAL; 发现这样写可以实现这个目的. 解决方案二: 执行sql