如何将userID1,userID2,userID3...转换成name1,name2,name3...

wwfgu00ing 2011-11-14 12:33:06
一个表中userID是唯一的,其对应一个name

现如何将一个字符串str如何将userID1,userID2,userID3...转换成name1,name2,name3...
str的组成规则是多个userID用逗号隔开,可能为空,可能仅含有一个userID



userID name
111 name111
222 name222
333 name333

现str="111,222,333"

转换后的为"name111,name222,name333"
...全文
383 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-14
  • 打赏
  • 举报
回复
用XML和replace替換字符不對麼?
中国风 2011-11-14
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#') is null
drop table #
Go
Create table #([userID] int,[name] nvarchar(6))
Insert #
select 3048,N'wwf123' union all
select 3049,N'mygood' union all
select 30330,N'牛人盛典'
Go


DECLARE @str NVARCHAR(1000)
SET @str='3048,30330'

SET @str=','+@str+','
Select @str=REPLACE(@str,','+RTRIM([userID])+',',','+[name]+',') from # WHERE ','+@str+',' LIKE '%,'+RTRIM([userID])+',%'
SELECT SUBSTRING(@str,2,LEN(@str)-2) AS STR

/*
wwf123,牛人盛典
*/
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wwfgu00ing 的回复:]
不能根据userID替换成name啊
name要根据这个对应的userID在数据表中查找才可以
[/Quote]
怎么个对应法?
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wwfgu00ing 的回复:]
不能根据userID替换成name啊
name要根据这个对应的userID在数据表中查找才可以
[/Quote]
我写两种都不是简单的替换吧
也是查找之后才操作的吧
wwfgu00ing 2011-11-14
  • 打赏
  • 举报
回复
不能根据userID替换成name啊
name要根据这个对应的userID在数据表中查找才可以
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwfgu00ing 的回复:]
只是这个例子比较特殊而已 楼上的都错了
[/Quote]

那你把对的说出来
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
 
if not object_id('tb') is null
drop table tb
Go
Create table tb([userID] int,[name] nvarchar(7))
Insert tb
select 111,N'name111' union all
select 222,N'name222' union all
select 333,N'name333'
Go
DECLARE @str VARCHAR(100)
SET @str='111,222,333'
WHILE EXISTS(SELECT 1
FROM dbo.tb
WHERE CHARINDEX(','+LTRIM([userID])+',',','+@str+',')>0)
BEGIN
SELECT @str=REPLACE(@str,[UserId],[name])
FROM tb
END
SELECT @str
/*
name111,name222,name333

(1 row(s) affected)
*/
wwfgu00ing 2011-11-14
  • 打赏
  • 举报
回复
userID name
3048 wwf123
3049 mygood
30330 牛人盛典
中国风 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwfgu00ing 的回复:]

userID与name之间并没有对应关系
转换的时候需要查找的
[/Quote]

列點特殊數據看看
wwfgu00ing 2011-11-14
  • 打赏
  • 举报
回复
只是这个例子比较特殊而已 楼上的都错了
wwfgu00ing 2011-11-14
  • 打赏
  • 举报
回复
userID与name之间并没有对应关系
转换的时候需要查找的
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
 
if not object_id('tb') is null
drop table tb
Go
Create table tb([userID] int,[name] nvarchar(7))
Insert tb
select 111,N'name111' union all
select 222,N'name222' union all
select 333,N'name333'
Go
DECLARE @str VARCHAR(100)
SET @str='111,222,333'

SELECT STUFF((SELECT ','+[name]
FROM dbo.tb
WHERE CHARINDEX(','+LTRIM([userID])+',',','+@str+',')>0
FOR XML PATH('')),1,1,'')
/*
name111,name222,name333

(1 row(s) affected)
*/
中国风 2011-11-14
  • 打赏
  • 举报
回复
CHARINDEX/PATINDEX

use Tempdb
go
--> -->

if not object_id(N'Tempdb..#') is null
drop table #
Go
Create table #([userID] int,[name] nvarchar(7))
Insert #
select 111,N'name111' union all
select 222,N'name222' union all
select 333,N'name333'
Go
DECLARE @str NVARCHAR(1000)
SET @str='111,222,333'
Select * from # WHERE PATINDEX( '%,'+RTRIM([userID])+',%', ','+@str+',')>0
/*
userID name
111 name111
222 name222
333 name333
*/
geniuswjt 2011-11-14
  • 打赏
  • 举报
回复

declare @str varchar(8000)='111,222,333'
if isnull(@str,'')<>''
set @str=stuff(replace(@str,',',',name'),1,0,'name')

select @str
/*
----------------------------
name111,name222,name333

(1 行受影响)
中国风 2011-11-14
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#') is null
drop table #
Go
Create table #([userID] int,[name] nvarchar(7))
Insert #
select 111,N'name111' union all
select 222,N'name222' union all
select 333,N'name333'
Go
DECLARE @str NVARCHAR(1000)
SET @str='111,222,333'
Select * from # WHERE ','+@str+',' LIKE '%,'+RTRIM([userID])+',%'
/*
userID name
111 name111
222 name222
333 name333
*/
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
xml path
NBDBA 2011-11-14
  • 打赏
  • 举报
回复
围观

这么麻烦不觉得设计有问题吗
中国风 2011-11-14
  • 打赏
  • 举报
回复
把臨時表替換為表名就行了
中国风 2011-11-14
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'T') is null
drop table T
Go
Create table T([userID] int,[name] nvarchar(6))
Insert T
select 3048,N'wwf123' union all
select 3049,N'mygood' union all
select 30330,N'牛人盛典'
Go




CREATE FUNCTION fn_Str(@str NVARCHAR(1000))
RETURNS NVARCHAR(1000)
AS
begin

if EXISTS(SELECT * FROM (
SELECT Col=SUBSTRING(@str,number,CHARINDEX(',',@str+',',number)-number)
FROM master.dbo.spt_values
WHERE type='P' AND CHARINDEX(',',','+@str,number)=number
) AS a
WHERE NOT EXISTS(SELECT 1 FROM T WHERE userID=a.Col)
)
RETURN 'False'

SET @str=','+@str+','
Select @str=REPLACE(@str,','+RTRIM([userID])+',',','+[name]+',') from T WHERE ','+@str+',' LIKE '%,'+RTRIM([userID])+',%'
RETURN( SUBSTRING(@str,2,LEN(@str)-2) )
END
GO
DECLARE @str NVARCHAR(1000)
SET @str='3048,30339'
SELECT dbo.fn_str(@str)
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wwfgu00ing 的回复:]
引用 20 楼 roy_88 的回复:
引用 19 楼 wwfgu00ing 的回复:

是的 有一个不存在 就都返回'false'



SQL code


use Tempdb
go
--> -->

if not object_id(N'Tempdb..#') is null
drop table #
Go
Create table #([userID] ……
[/Quote]
你要学会修改啊
加载更多回复(5)
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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