惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
T
Threatpost
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - Franky
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
S
Security Affairs
P
Proofpoint News Feed
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
S
Security @ Cisco Blogs
H
Hacker News: Front Page
Security Archives - TechRepublic
Security Archives - TechRepublic
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
Know Your Adversary
Know Your Adversary
Y
Y Combinator Blog
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
量子位
博客园_首页
The Last Watchdog
The Last Watchdog
D
DataBreaches.Net
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
The Register - Security
The Register - Security
Schneier on Security
Schneier on Security
H
Help Net Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
L
Lohrmann on Cybersecurity
S
Secure Thoughts
Stack Overflow Blog
Stack Overflow Blog
Cloudbric
Cloudbric
Microsoft Security Blog
Microsoft Security Blog

博客园 - peak

windows 服务器时间同步失败处理方法 利用批处理自动创建schtasks系统任务 抓取网站编码信息及内容 在线调试利器Fiddler AutoResponse jquery跨域调用WCF Base-64 字符串中的无效字符 Ie7下鼠标滚轮失效 Android 笔记二(取得根目录权限) Android 笔记一 捕获asp.net ValidationSummary 控件消息。 - peak Rss的浏览器之痛 兼容IE,Firefox 图片即时显示 asp.net 中插入flash - peak - 博客园 迷茫 windows service 之访问权限 windows Service 之调试过程 比尔盖兹在某个大学毕业典礼上的演讲中,对毕业生提出十一项极为睿智的人生建议 MSDN上关于泛型的例子 泛型
Sql Split 函数
peak · 2009-12-27 · via 博客园 - peak

Split 函数

CREATE FUNCTION [dbo].[Fun_Split] 
(
 
@field varchar(1000),
 
@ContainValue varchar(8000)
)
RETURNS varchar(4000)
AS
BEGIN
 
declare @strRet varchar(10)
 
declare @strTemp varchar(1000)
 
declare @StrSeprate varchar(10)
 
DECLARE @i int
 
set @StrSeprate=','
 
set @strRet='1'
 
SET @ContainValue=rtrim(ltrim(@ContainValue))
 
SET @i=charindex(@StrSeprate,@ContainValue)WHILE (@i>=1)
 
BEGIN
  
set @strTemp=(left(@ContainValue,@i-1))
  
if(charindex(','+@strTemp+ ',',',' + @field + ',')=0)
  
begin
    
set @strRet='0'
  
end
  
SET @ContainValue=substring(@ContainValue,@i+1,len(@ContainValue)-@i)
  
if(@strRet='0')
    
begin
        
SET @i=0
    
end
  
else
    
begin
        
SET @i=charindex(@StrSeprate,@ContainValue)
    
end
 
ENDif(@strRet='1')
  
begin
   
if(charindex(','+@ContainValue+',',','+@field+',')=0)
      
begin
        
set @strRet='0'
      
end
  
end
  
  
return @strRet
 
end

 以上函数有两个输入参数,@field 是需要判断的参数,@ContainValue是否被包含的值。

@field 中包含@ContainValue 的所有值时,返回1,否者返回0.

以下是实际中的使用:

tablename: test

id name value
1 A 1,2,3,4
2 B 2,3,4
3 C 3,4,5

SQL->select * from test where dbo.Fun_Split(value,'2,4')=1

查询结果:

id name value
1 A 1,2,3,4
2 B 2,3,4

以上是我最近工作中编写的一个函数,是为了解决一个特殊的查询的问题。其实,产生这样的问题是源于自己在设计表结构时不合理的缘故。

关于这样的问题,还有一个更简单的方法(这里不谈数据库结构的设计),就是在Visual studio IDE 中创建一个SqlServerProject ,编写一个如下的函数:

代码

[Microsoft.SqlServer.Server.SqlFunction]
    
public static string StrContain(string field,string value)
    {
        
bool isContain = true;
        
if (!string.IsNullOrEmpty(value))
        {
            
string[] values = value.Split(',');
            
foreach (var item in values)
            {
                
if ((',' + field + ",").IndexOf(',' + item + ','< 0)
                {
                    isContain 
= false;
                    
break;
                }
            }
        }
       
return isContain?"1":"0";
    }

启用sqlserver2005 的 Clr(我用的sqlserver2005 和 sqlserver2008).

代码

--启动clr
exec sp_configure 'show advanced options''1'
go
reconfigure
go
exec sp_configure 'clr enabled''1'
go
reconfigure
go
exec sp_configure 'show advanced options''1'
go--关闭clr
exec sp_configure 'clr enabled''0'
go
reconfigure
go

select * from test where dbo.strContain(value,@input)=1;

查询的结果与上边的sql function一样的。

由于我考虑到客户服务器权限的问题,所以还是使用了 sql function的方式。