各位老师:在sql中下面字符串应该怎么处理?sql语句应该怎么写?

各位老师:在sql中下面字符串应该怎么处理?sql语句应该怎么写?,第1张

--用CTE递归分解:
with tmp(col) as
 (select '张三三,李斯,王武武,李六六六'),
roy AS
 (SELECT col =
         CAST(LEFT(col, CHARINDEX(',', col + ',') - 1) AS NVARCHAR(100)),
         Split = CAST(STUFF(col + ',', 1, CHARINDEX(',', col + ','), '') AS
                      NVARCHAR(100))
    from tmp
  UNION ALL
  SELECT col = CAST(LEFT(Split, CHARINDEX(',', Split) - 1) AS NVARCHAR(100)),
         Split =
         CAST(STUFF(Split, 1, CHARINDEX(',', Split), '') AS NVARCHAR(100))
    FROM Roy
   WHERE split > '')
select col from roy

--如果你的html代码还算规律,下面的办法可以实现,经过测试:

--自己再增加一些需要过滤的字符,如 & bsp; 等

declare @str varchar(4000)--原字符

declare @out varchar(4000)--结果字符

declare @index int--位置

declare @index2 int--位置

set @index=1--初始化

set @out=''--

set @str='<h2><strong>测<span style="font-family: 幼圆">试</span>复<span style="font-size: small">杂</span>文</strong>本<u>邮</u><big>件</big></h2><p>请二位<sub>二</sub></p><ul>    <li>24112<sup>3<img alt="" src=">

set @str=replace('>'+@str+'<',' ','')--去掉空格;增加>、<,避免标签不完整

while len(@str)>0 and @index>0

begin

set @index = (select charindex('>',@str))

if(@index>0)

begin

set @str=substring(@str,@index+1,len(@str))

set @index2=(select charindex('<',@str))

set @out=@out+replace(substring(@str,0,@index2),'>','')--去掉多余的 >

end

end

print '结果:'+@out

SQL Server 中截取字符串常用的函数
1LEFT ( character_expression , integer_expression )
函数说明:LEFT ( '源字符串' , '要截取最左边的字符数' )
返回从字符串左边开始指定个数的字符
select LEFT('SQL_Server_2008',4 );
返回结果:SQL_
2RIGHT ( character_expression , integer_expression )
函数说明:RIGHT ( '源字符串' , '要截取最右边的字符数' )
返回字符串中从右边开始指定个数的 integer_expression 字符
select RIGHT('SQL_Server_2008',4 );
返回结果:2008
3SUBSTRING ( character_expression , start , length )
函数说明:SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度' )
返回字符、binary、text 或 image 表达式的一部分
select SUBSTRING('SQL_Server_2008',5 ,6);
返回结果:Server

奶奶的,我发现了,个就是一个天才儿童,各位大神,各有自己解决了,靠人不如靠自己啊!!!哈哈哈!!!!!!!!!!!!!!!!!!这个问题的结局方案仅供参考:String
sql="select

from
"+s1+";

思路很简单, 取整个字符串的长度,然后取除4 后向上取整,得到循环次数。再添加“-”。
declare @Word varchar(100)
declare @CharSize float
declare @spCharNumber float
declare @i int
set @Word= 'BD202E9689D446E88C21D'
set @CharSize=len(@Word)
set @spCharNumber=4
set @i=ceiling(@CharSize/@spCharNumber)
while (@i>1)
begin
select @Word=left(@Word,4(@i-1))+'-'+right(@Word, (len(@Word)-4(@i-1)))
select @i=@i-1
end
print @Word

access里的函数支持少的可怜,不过也够用了。
算法是:用InStr找到第一个逗号的位置(比如说第A个字),然后截取从第A+1个字到结尾的部分,如果这部分还有逗号的话,就说明td中的逗号大于二个。
下面是文本函数,你参考一下吧:
▲文本
Asc 返回字母的Acsii值,select Asc("A")返回65
Chr 将ascii值转换到字符 select chr(65)返回"A"
Format 格式化字符串,Select Format(now(),'yyyy-mm-dd')返回类似于"2005-04-03" ,Select Format(3/9,"000")返回033
InStr 查询子串在字符串中的位置 select Instr("abc","a")返回1,select Instr("abc","f")返回0
LCase 返回字符串的小写形式
Left 左截取字符串
Len 返回字符串长度
LTrim 左截取空格
Mid 取得子字符串 select mid("123",1,2) as midDemo 返回12
Right 右截取字符串
RTrim 右截取空格
Space 产生空格 select Space(4)返回4个空格
StrComp 比较两个字符串是否内容一致(不区分大小写)select StrComp("abc","ABC")返回0,select StrComp("abc","123")返回-1
Trim 截取字符串两头的空格
UCase 将字符串转大写

找了个储存过程
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
--date :2003-10-14
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end
返回的是一个table,所以执行要用如下格式:select from dbof_split('ABC:BC:C:D:E',':')

你可以用right函数和SubString函数来组合用
方法如下:
select SubString(“tag”,4,2), from news
从tag 字段里从第4个字符取数,连取2个
SubString(“00001230000”,5,3)
显示出来的就是123
right("tag",4) 的意思就表示从右边只取4个字符
right("000001111",4)显示出来的就是1111


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10386866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存