【问题标题】:SQL: Find first occurrence of any character except the one specifiedSQL:查找除指定字符之外的任何字符的第一次出现
【发布时间】:2018-06-15 20:30:48
【问题描述】:

全部,

使用 SSMS v17.2

长话短说,我在一个表中有 15 列,表中的每条记录都有不同数量的列填写,其余为空。然后我用逗号分隔符连接列。问题是 null 的字段也被连接起来,留下逗号。

ARNP,ACLS Provider,BLS Provider CPR,,,,,,,,,,,,
COC,CPC,CRC,CPC-1,,,,,,,,,,,
CISSP,CCNA Security,Network +,,,,,,,,,,,,
Leadership (All levels),Education (Grades K-12),,,,,,,,,,,,,,

如您所见,尾随逗号之前的最后一个字符可以是字母数字或特殊字符。我需要帮助删除这些训练逗号,直到第一个不是逗号的字符,如下所示。

ARNP,ACLS Provider,BLS Provider CPR
COC,CPC,CRC,CPC-1
CISSP,CCNA Security,Network +
Leadership (All levels),Education (Grades K-12)

谢谢

【问题讨论】:

  • 这和 SQL 有什么关系?
  • 您使用的是什么 SQL 实现?有CONCAT_WS吗? SSMS 只是客户端。你连接到什么版本的(大概)SQL Server?
  • 看起来你的源表根本没有规范化 BTW

标签: sql sql-server string split


【解决方案1】:

这会在连接后返回正确的数据:

SELECT LEFT(@MyData, charindex(',,', @Mydata) - 1)

这可以防止尾随逗号被连接:

SELECT Col1 + ',' + IsNull(Col2 + ',', '') + IsNull(Col3 + ',', '') + IsNull(Col4 + ',', '') + 
    IsNull(Col5 + ',', '') + IsNull(Col6 + ',', '') + IsNull(Col7 + ',', '') + IsNull(Col8 + ',', '') +
    IsNull(Col9 + ',', '') + IsNull(Col10 + ',', '') + IsNull(Col11 + ',', '') + 
    IsNull(Col12 + ',', '') + IsNull(Col13 + ',', '') + IsNull(Col14 + ',', '') + IsNull(Col15, '')

实际上,上述方法仅在连接空值返回空值时才有效。如果这一行:

SELECT 'xxx' + NULL

返回

xxx

那么我的第二个建议不起作用

【讨论】:

  • 双逗号解决方案是天才。很简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2011-02-04
  • 2017-11-12
  • 2021-08-14
相关资源
最近更新 更多