sql-server - 从 sql 存储过程中的逗号分隔字符串中删除一个值
问题描述
我有一个存储逗号分隔的出版物 id 的字段。例如 123456,2345678,123567,2345890 等。当我从数据库中提取数据时,我将其放入 json 对象中,网页会循环这些值并显示数据。效果很好。
我想做的是将存储过程中的一个数字发送给存储过程,存储过程会将其从字符串中删除并将其保存回表中。例如最终用户在出版物 123567 上工作,现在想要完成它,所以我想将它从字符串中删除,这样他们以后就看不到它了。我在数据库中有一个拆分功能,但我不知道如何连接它以删除或重建没有发布 ID 的字符串。
我没有任何代码要显示,因为我不知所措。我想我需要传递整个字符串和 ID。拆分字符串并循环每个值以重建一个新字符串,但检查 ID 是否存在并跳过它。
这是最好的方法吗?
谢谢你的帮助
我最终的工作基础是:
ALTER FUNCTION dbo.RemovePMID (
@S VARCHAR(MAX)
,@PMID VARCHAR(15)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @T VARCHAR(50)
DECLARE @W VARCHAR(50)
SET @T = ''
WHILE len(@S) > 0
BEGIN
SET @W = left(@S, charindex(',', @S + ',') - 1)
IF charindex(@W, + @PMID) = 0
SET @T = @T + ',' + @W
SET @S = stuff(@S, 1, charindex(',', @S + ','), '')
END
RETURN substring(@T, 2, len(@T) - 2)
END
GO
解决方案
不需要循环(请看一下 Larnu 对您的解析/拆分功能的建议)
也就是说,请考虑以下内容
例子
Declare @S varchar(max) = '123456,2345678,123567,2345890'
Declare @Zap varchar(50)='123456'
Select reverse(stuff(reverse(stuff(replace(','+@S+',',','+@Zap+',',','),1,1,'')),1,1,''))
退货
2345678,123567,2345890
推荐阅读
- rest - “Application/vnd.api+json”抛出“不支持的媒体类型”
- django - django中这个函数是什么意思
- android - 使用 FLAG_ACTIVITY_REORDER_TO_FRONT 在活动之间切换会导致循环
- java - 如何配置简单的 Java fontconfig.properties 文件以在 Linux 上使用
- c# - 嵌套的 Json 结构 .NET
- swift - 如何以编程方式在 Apple 的提醒应用程序中为列表对象设置图标?
- java - Android:以编程方式旋转按钮内的文本
- javascript - 用 Javascript 或 jQuery 检测和替换长字符串
- python - 在python中使用if的有效方法
- c++ - 如何解决 mini_racer 0.2.4 编译问题以解决 Bundler 对 Fedora 31 的依赖?