如何快速取到二字符串的并集 ? 隻有10分了。實在不好意思 !*_*

CtrlT 2005-01-07 09:47:14

如下字串要進行合並
比如:

原字串1: '000101000'
原字串2: '000110001'

結果字串:'000111001'

如何才能簡單一點的合並出來?

隻有10分了。實在不好意思 !*_*
...全文
137 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
十一维空间 2005-01-07
  • 打赏
  • 举报
回复
学习
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
再UP!
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
樓上的:
1:以","隔开的方式传递。
2:以数据集合方式传递:

都可以提供。。。。




上樓幾個的非常好用..

有沒更好的法子?
zlp321002 2005-01-07
  • 打赏
  • 举报
回复
字符串,以什么方式传递过来!
1:以","隔开的方式传递: 如:'000101000','000110001'
2:以数据集合方式传递:如:'000101000',
'000110001'

请问你属于哪种方式???
lsxaa 2005-01-07
  • 打赏
  • 举报
回复
我做一个,你参考一下

declare @maxlen int
declare @s1 varchar(100)
declare @s2 varchar(100)
declare @s3 varchar(100)

set @s1='000101000'
set @s2='000110001'
set @maxlen=len(@s1)
set @s3=''

set rowcount @maxlen
select id=identity(int,1,1) into #t from sysobjects a,sysobjects b
set rowcount 0

select @s3=@s3+case when substring(@s1,b.id,1)=substring(@s2,b.id,1) then substring(@s1,b.id,1)
else '1'
end
from #t b

select @s3
xiajianfeng 2005-01-07
  • 打赏
  • 举报
回复
CREATE FUNCTION dbo.UnionValue (@Str1 VARCHAR(9), @Str2 VARCHAR(9))
RETURNS VARCHAR(9) AS
BEGIN
DECLARE @Str VARCHAR(9)
DECLARE @RetStr VARCHAR(1)
DECLARE @i INT
SET @Str = ''
SET @i = 1
WHILE (@i < 10)
BEGIN
IF (SUBSTRING(@Str1, @i, 1) + SUBSTRING(@Str2, @i, 1)) = '00'
SET @RetStr = '0'
ELSE
SET @RetStr = '1'
SET @Str = @Str +@RetStr
SET @i = @i + 1
END
RETURN @Str
END

--调用
SELECT dbo.UnionValue('000101000', '000110001')
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
看以前同事寫的用了好多循環,實在很復紮.

我想了半天又想不出簡單的法子。。
lsxaa 2005-01-07
  • 打赏
  • 举报
回复
你是怎么合并的
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
自已UP 先!
Liroyal 2005-01-07
  • 打赏
  • 举报
回复
如果全部是二进制数,按位OR就可以啦

原字串1: '000101000' => 40
原字串2: '000110001' => 49

select 40 | 49

-----------
57

(所影响的行数为 1 行)
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
再UP上去!
CtrlT 2005-01-07
  • 打赏
  • 举报
回复
跟據樓上一位的改進一下。改成了可取並集和交集的一個函數。

但總覺得還是太復紮了一點點.

.
不知有沒更簡單的呢?


CREATE FUNCTION Union_String
(
@UniouStr1 VARCHAR(20)
,@UniouStr2 VARCHAR(20)
,@UnionFlag INT -- =1 並集 =0 交集
)
RETURNS VARCHAR(20)
BEGIN

DECLARE @StrLength INT , @ReturnStr VARCHAR(20) ,@StrTemp VARCHAR(20)
SET @ReturnStr=''
SET @StrLength=LEN(@UniouStr1)

WHILE ( @StrLength>0 )
BEGIN

SET @StrTemp=LEFT(@UniouStr1,1) + LEFT(@UniouStr2,1)

IF ( @StrTemp= '00' OR ( @StrTemp<>'11'AND @UnionFlag=1) )
BEGIN
SET @ReturnStr=@ReturnStr+'0'
END
ELSE
BEGIN
SET @ReturnStr=@ReturnStr+'1'
END
--//----------------------------------------------------------
SET @StrLength=@StrLength-1
SET @UniouStr1=RIGHT(@UniouStr1,@StrLength)
SET @UniouStr2=RIGHT(@UniouStr2,@StrLength)
END
RETURN @ReturnStr
END






34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧