SQL字符串截取
2009-10-13 16:39
441 查看
今天接到一个需求,统计一下邮箱系统一至九月分的用户开销户记录,开户记录很容易就查到了,但由于用户销户后数据库表中找不到对应的用户信息,查了一系列的表,发现SBMailSubUserLog其中一列中包含有用户的部分信息,如果想要使用的话必须截取,然后我们步入正题,截取数据串。
原始的字符串‘邮箱成功开通
Passwd=Nm,12345,Mailsize=30,Mailname=gtxx_lijie,Displayname=李洁,saa’
现在我们把Mailname和Displayname提取出来,以Displayname为例,大体思路是这样:把‘Displayname=’和前面的数据截取掉,留下后面的数据,
SQL:
Select SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)) from SBMailSubUserLog where subtype like '%员工业务开通%' and mobile in (select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')
显示出来的就是这样’ 李洁,saa’现在再整理‘,’号之后的数据select left(subdesc,patindex('%,%', subdesc)) from SBMailSubUserLog,然后把它们整合起来,
Select left(SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)),patindex('%,%',SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc))))
from SBMailSubUserLog
where subtype like '%员工业务开通%' and
mobile in
(select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')。
完整的提取数据的SQL:
[align=left]select distinct a.mobile,b.displayname,b.mailname,[/align]
[align=left]datepart(year,a.changedate)*10000+datepart(month,a.changedate)*100+datepart(day,a.changedate) as changedate2,[/align]
[align=left]a.source,a.subtype,a.subdesc[/align]
[align=left]from SBMailSubUserLog a join [/align]
[align=left](select mobile,[/align]
[align=left]left(SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)),patindex[/align]
[align=left]('%,%',SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)))) as displayname,[/align]
[align=left]left(SUBSTRING(subdesc,CHARINDEX('mailname',subdesc)+12,LEN(subdesc)-CHARINDEX('mailname',subdesc)),patindex[/align]
[align=left]('%,%',SUBSTRING(subdesc,CHARINDEX('mailname',subdesc)+12,LEN(subdesc)-CHARINDEX('mailname',subdesc)))) as mailname,[/align]
[align=left]source,subtype,datepart(year,changedate)*10000+datepart(month,changedate)*100+datepart(day,changedate) as changedate1[/align]
[align=left] from SBMailSubUserLog[/align]
[align=left]where subtype like '%员工业务开通%' and[/align]
[align=left] mobile in[/align]
[align=left](select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')[/align]
[align=left]) b on a.mobile=b.mobile[/align]
[align=left]where a.subtype like '%员工业务关闭%' [/align]
[align=left]--and a.changedate>='2009-01-01 00:32:24.327' [/align]
[align=left]and datepart(year,a.changedate)*100+datepart(month,a.changedate)='200904'[/align]
order by changedate2本文出自 “逸志斋” 博客,转载请与作者联系!
原始的字符串‘邮箱成功开通
Passwd=Nm,12345,Mailsize=30,Mailname=gtxx_lijie,Displayname=李洁,saa’
现在我们把Mailname和Displayname提取出来,以Displayname为例,大体思路是这样:把‘Displayname=’和前面的数据截取掉,留下后面的数据,
SQL:
Select SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)) from SBMailSubUserLog where subtype like '%员工业务开通%' and mobile in (select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')
显示出来的就是这样’ 李洁,saa’现在再整理‘,’号之后的数据select left(subdesc,patindex('%,%', subdesc)) from SBMailSubUserLog,然后把它们整合起来,
Select left(SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)),patindex('%,%',SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc))))
from SBMailSubUserLog
where subtype like '%员工业务开通%' and
mobile in
(select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')。
完整的提取数据的SQL:
[align=left]select distinct a.mobile,b.displayname,b.mailname,[/align]
[align=left]datepart(year,a.changedate)*10000+datepart(month,a.changedate)*100+datepart(day,a.changedate) as changedate2,[/align]
[align=left]a.source,a.subtype,a.subdesc[/align]
[align=left]from SBMailSubUserLog a join [/align]
[align=left](select mobile,[/align]
[align=left]left(SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)),patindex[/align]
[align=left]('%,%',SUBSTRING(subdesc,CHARINDEX('DISPLAYNAME',subdesc)+12,LEN(subdesc)-CHARINDEX('DISPLAYNAME',subdesc)))) as displayname,[/align]
[align=left]left(SUBSTRING(subdesc,CHARINDEX('mailname',subdesc)+12,LEN(subdesc)-CHARINDEX('mailname',subdesc)),patindex[/align]
[align=left]('%,%',SUBSTRING(subdesc,CHARINDEX('mailname',subdesc)+12,LEN(subdesc)-CHARINDEX('mailname',subdesc)))) as mailname,[/align]
[align=left]source,subtype,datepart(year,changedate)*10000+datepart(month,changedate)*100+datepart(day,changedate) as changedate1[/align]
[align=left] from SBMailSubUserLog[/align]
[align=left]where subtype like '%员工业务开通%' and[/align]
[align=left] mobile in[/align]
[align=left](select distinct mobile from SBMailSubUserLog where subtype like '%员工业务关闭%' and changedate>='2009-01-01 00:32:24.327')[/align]
[align=left]) b on a.mobile=b.mobile[/align]
[align=left]where a.subtype like '%员工业务关闭%' [/align]
[align=left]--and a.changedate>='2009-01-01 00:32:24.327' [/align]
[align=left]and datepart(year,a.changedate)*100+datepart(month,a.changedate)='200904'[/align]
order by changedate2本文出自 “逸志斋” 博客,转载请与作者联系!
相关文章推荐
- sql实现字符串的截取和替换
- SQL截取字符串
- SqlParameter 能不能截取字符串
- SQL截取字符串
- SQL字符串截取(SubString)
- sql 2005 中英文混合的字符串截取函数
- SQL截取字段字符串的方法
- sql 截取字符串
- PL/SQL字符串截取函数
- 截取字符串--sql和access的区别
- SQL字符串截取
- sql语句中截取字符串
- MyBatis动态sql_trim自定义字符串截取
- sql中截取连个字符串之间的数据
- SQL 查询的列中截取一部分字符串作为新列
- SQL将datetime转化为字符串并截取字符串
- sql 中英文 混合 字符串截取函数
- SQL截取字符串(转)
- SQL语句中截取字符串Substr
- sql string转换成int型 sql截取字符串