关于截取数据库字符串

今天在论坛看到一个帖子,觉得很好玩,就去弄了一下。问题是这样的。

有张 Log表


User表

需要实现的效果是


我用的存储过程来实现的

create proc Ganker
as
declare @num int
set @num=0
declare @str1 varchar(50)
declare @str2 varchar(50)
declare @i int
declare @j int
declare @val1 varchar(50)
declare @val2 varchar(50)
declare @name1 varchar(50)
declare @name2 varchar(50)
declare @txt varchar(100)
declare @count int
select @count=COUNT(*) from [log]

begin

	while(@count>=@num+1)
      begin
       	  
		select top(1) @str1=Title from [Log] where id not in (select top(@num) id from [Log]) -- 一次读取一条数据

		set @i=charindex('{',@str1)--获取第一个前括号
		set @j=CHARINDEX('}',@str1)-- 获取第一个后括号
		set @val1=substring(@str1,@i+1,@j-@i-1)-- 获取括号里面的 UserID
		set @str1=SUBSTRING(@str1,@j+1,len(@str1)-@j+1)-- 获取去除括号后的Title

		set @i=CHARINDEX('{',@str1) -- 在去除第一个括号后 再次截取'{' 看是否有值
		if(@i=0) --为0说明 没有括号了
		  begin
			select @name1=name from [User] where UserID=@val1	--根据ID 获取 名字
			set @txt=@name1+@str1
			print @txt   
		  end
		else --如果不为0 说明还有括号
		  begin
			set @str2=SUBSTRING(@str1,1,@i-1) --截取 两个括号之间的文字
			set @j=CHARINDEX('}',@str1)	 --获取后一个括号的'}'
			
			set @val2=substring(@str1,@i+1,@j-@i-1)	--获取第二个括号内的 UserId
			select @name1=name from [User] where UserID=@val1  --获取第一个括号里UserID的名字
		    select @name2=name from [User] where UserID=@val2  --获取第二个括号里UserID的名字
			
			if(@j<LEN(@str1)) -- 如果后一个括号的长度 < 截取后title的长度 说明'}'后面还有内容
			  begin
				set @str1=SUBSTRING(@str1,@j+1,len(@str1)-@j+1)	--获取第二个括号后面的内容
				set @txt=@name1+@str2+@name2+@str1
				print @txt
			  end	
		    else  -- 如果后一个括号的长度 = 截取后title的长度 说明'}'后面没有内容了
			 begin
				set @txt = @name1+@str2+@name2
				print @txt
			 end
		  end
		  set @num=@num+1
      end	
   	
end

贴出来,分享一下。





达梦数据库字符串截取可以根据你的具体需求而有所不同。在达梦数据库字符串截取可以通过使用SUBSTRING函数来实现。SUBSTRING函数用于从一个字符串截取指定长度的子字符串。具体使用方法是指定要截取字符串和起始位置以及长度。 如果你需要截取一个字符串的前几个字符,可以使用以下示例代码: ``` SELECT SUBSTRING('你的字符串', 1, 截取长度); ``` 其,'你的字符串'是你要截取字符串截取长度是你想要截取的字符个数。 如果你需要截取一个字符串间部分,可以使用以下示例代码: ``` SELECT SUBSTRING('你的字符串', 起始位置, 截取长度); ``` 其,'你的字符串'是你要截取字符串,起始位置是你想要开始截取的位置,截取长度是你想要截取的字符个数。 请注意,在达梦数据库字符串的长度计算可能会受到数据库初始化参数LENGTH_IN_CHAR的影响。根据这个参数的不同取值,一个文字符在存储时可能占据2个字节或3个字节。因此,在进行字符串截取时,你需要确保考虑到这一点。 另外,如果你遇到了字符串截断的错误,可能是由于执行INSERT操作时字符串长度超过了列的定义长度。为了解决这个问题,你可以检查你的数据是否超过了列定义的长度,并考虑适当调整列的长度或者截取字符串以符合列的定义。 总结起来,达梦数据库字符串截取可以通过使用SUBSTRING函数并结合长度和起始位置来实现。同时,在进行字符串截取时,需要考虑到数据库初始化参数LENGTH_IN_CHAR的影响,并确保字符串长度不超过列的定义长度[1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值