sql - 在字符串连接之间添加字符的函数
问题描述
有没有更简单的方法在连接时在整个字符串中添加字符?我正在考虑利用一个函数来做到这一点,并且可以通过连接来实现它;但是,除了连接之外,还有其他方法可以完成吗?
这是我需要做的......表 A 有 8 列,例如 col1、col2、col3 等。
;WITH
TABLE_A
AS
(
SELECT 'ABC' AS Col1
, 'COM' AS Col2
, 'SMALL' AS Col3
, '1234' AS Col4
, 'ABC INC.' AS Col5
, '123456789' AS Col6
, 'ABC Of New England' AS Col7
, 'NC123456' AS Col8
)
SELECT *
FROM TABLE_A
我需要将列中的值与每个之间的 > 连接起来。我可以通过做一些类似的事情来做到这一点......
CONCAT(Col1,'>',Col2,'>',Col3,'>',Col4,'^',Col5,'>',Col6,'>',Col7,'>',Col8)
但我需要它是动态的,所以例如如果 col1 - Col3 有一个值,那么连接必须只发生在那些 CONCAT(Col1,'>',Col2,'>',Col3) 并且如果 Col1 - Col5 有值然后 CONCAT(Col1,'>',Col2,'>',Col3,'>',Col4,'^',Col5) 等等,连接应该只在有值的情况下进行。
另外要添加另一个皱纹,而不是 Col4 和 Col5 之间的 >,我需要一个胡萝卜 ^ 作为分隔符。
有没有不使用 CONCAT 的替代方法?也许是一个循环?
解决方案
这是一个可行的示例,尽管它只进行了最少的验证来满足您的要求。
;WITH
TABLE_A
AS
(
SELECT 'ABC' AS Col1
, 'COM' AS Col2
, 'SMALL' AS Col3
, '1234' AS Col4
, 'ABC INC.' AS Col5
, '123456789' AS Col6
, 'ABC Of New England' AS Col7
, 'NC123456' AS Col8
)
SELECT ConcentenatedString = ISNULL(('>' + NULLIF(a.Col1,'')),'')
+ISNULL(('>' + NULLIF(a.Col2,'')),'')
+ISNULL(('>' + NULLIF(a.Col3,'')),'')
+ISNULL(('>' + NULLIF(a.Col4,'')),'')
+ISNULL(('^' + NULLIF(a.Col5,'')),'')
+ISNULL(('>' + NULLIF(a.Col6,'')),'')
+ISNULL(('>' + NULLIF(a.Col7,'')),'')
+ISNULL(('>' + NULLIF(a.Col8,'')),'')
FROM TABLE_A a
NULLIF
s 用于将空白字符串转换为 NULL,以便在连接到 NULL 时消除分隔符。然后将这些 NULL 转换回空白,以防止字符串的其余部分被消除。
推荐阅读
- javascript - 带有条件 JavaScript 的在线表单?
- spring - 如果远程 repo 不可用,如何为 Spring Cloud Config 服务设置本地回退配置?
- c# - 无法通过使用 EWS 模拟来限制对共享日历的访问
- nginx - 包含带有 server_name 的外部文件
- scala - 在测试中,为什么不将方法作为理解执行的一部分调用?
- regex - 如何检测子字符串中的第一个单词是否完全大写?
- android - ExoPlayer:如何更改控制器元素的颜色
- spring - Spring Integration DSL:Dispatcher 没有订阅者
- asp.net - 信号 R - 不加载其他页面
- azure-storage - 用于天蓝色文件存储 StorageV2 的工作更新示例 C#