字符串拆分或其他类似的带有 case 语句的 SQL Server 函数

塔瓦伦多

我准备了这个演示,我想在 SQL 服务器中使用 string_split 或其他函数,可能在 case 语句中实现这样的输出:

Writer   
Sabao Fulano, Sapato Feio, Jose Perreira
Toze Jose
Feijao Mauricio

编辑

这个问题与评论中建议的问题之间的区别在于,在这里,不仅要拆分逗号,而且还有一个“XX”,每个名称都以这种方式出现:

  1. “萨宝某某,XX Some_Random_Text”成为“萨宝某某”

  2. “Sapato Feio, XX, Jose Perreira, XX”成为“Sapato Feio, Jose Perreira”

基本上,如果旁边没有逗号的XX,那么只留下第一个实例,说“Sabao Fulano”,或者如果有XX +“,”然后删除它们中的两个(上面的第二种情况)。这个想法是只留下用逗号分隔的名称。

罗南·艾瑞利

再会,

要求并不完全清楚,因为在描述中您说“ The goal is to have just names and not XX.”,但在请求的结果中,您没有源中存在的文本“第 3 条”。

如果您只是想删除“,XX”,那么我们可以使用简单的 REPLACE 如下所示:

WITH WriterTbl AS (
    SELECT 'Sabao Fulano, XX, Sapato Feio, XX, Jose Perreira, XX' AS Writer UNION ALL
    SELECT 'Toze Jose, XX' UNION ALL
    SELECT 'Feijao Mauricio, XX Article 3'
)
select REPLACE(WriterTbl.Writer,', XX',', ')
from WriterTbl

但是,如果您确实想删除以“,XX”开头的部分,并且您要求使用原始问题中提出的 STRING_SPLIT(假设您不会更改问题),那么我们可以使用 STRING_SPLIT 来查找我们需要删除的文本,然后我们可以使用函数 STRING_AGG 再次连接文本

有一点你必须记住,我敢肯定大多数人都没有想到:STRING_SPLIT 不保证结果的顺序,这意味着通过拆分文本并重新连接它,你可能会得到不同的结果命令

根据这些限制和您的要求,请检查此解决方案:

WITH WriterTbl AS (
    SELECT 'Sabao Fulano, XX, Sapato Feio, XX, Jose Perreira, XX' AS Writer UNION ALL
    SELECT 'Toze Jose, XX' UNION ALL
    SELECT 'Feijao Mauricio, XX Article 3'
),
MyCTE AS(
    select MyGroup = ROW_NUMBER() OVER (order by (select null)), t1.Writer
    from WriterTbl t1
)
SELECT STRING_AGG(t2.[value], ',') 
FROM MyCTE t1
CROSS APPLY (
    SELECT * from STRING_SPLIT (t1.Writer, ',') t2
) t2
where not t2.[value] like ' XX%'
group by MyGroup

笔记!不建议执行此任务,我强烈建议您重新考虑您的要求和架构!

子注!即使您仍然需要从这个输入中获得这个结果,那么您可能应该创建自己的函数而不是使用内置函数 STRING_SPLIT。没有理由拆分数据以将其连接回来。在您的用户函数中,您可以简单地删除以“, XX”开头并以“,”结束的文本,或者如果这是值的最后一部分。这里的解决方案是根据您的要求使用 STRING_SPLIT

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server:用其他字符串替换字符串的“Case When”语句不起作用

来自分类Dev

Sql Server 奇怪的 CASE 语句

来自分类Dev

带有ELSe的嵌套CASE语句(SQL Server)

来自分类Dev

SQL Server 2005中带有CASE WHEN语句的IS NULL

来自分类Dev

具有多条件语法的SQL Server CASE语句

来自分类Dev

具有多条件语法的SQL Server CASE语句

来自分类Dev

SQL Server:WHERE子句中具有IN条件的CASE语句

来自分类Dev

带有OR的SQL CASE语句?

来自分类Dev

在SQL Server中将CASE语句与SUM函数一起使用

来自分类Dev

使用case语句时,SQL Server 2016 FOR JSON PATH返回字符串而不是数组

来自分类Dev

SQL Server Case语句和聚合功能

来自分类Dev

SQL Server:长CASE语句的替代方法

来自分类Dev

尝试在SQL Server中使用CASE语句

来自分类Dev

SQL Server:case语句中的昂贵查询

来自分类Dev

SQL Server TVP与Where / Case语句合并

来自分类Dev

嵌入在In子句中的SQL Server case语句

来自分类Dev

尝试在SQL Server中使用CASE语句

来自分类Dev

从 case 语句中添加行 - SQL Server

来自分类Dev

在 SQL Server 中使用嵌套的 CASE 语句

来自分类Dev

动态添加case语句sql server

来自分类Dev

在总和中嵌套 Case 语句 - SQL Server

来自分类Dev

用户定义的带有CASE语句的函数

来自分类Dev

sql case语句或if语句

来自分类Dev

SQL Server 中使用 Case 语句的嵌套 If 语句

来自分类Dev

SQL Server:在SELECT语句中拆分字符串

来自分类Dev

使用 C# 对 SQL Server 语句中的列执行字符串函数

来自分类Dev

SQL Server-基于其他字段内容的一个字段的Case语句

来自分类Dev

SQL Server使用Case或其他方式删除多个if语句

来自分类Dev

使用“ AS”语句在SQL Server中创建函数

Related 相关文章

热门标签

归档