【问题标题】:SQL SERVER - Split a Comma Separated Number Into Two ColumnsSQL SERVER - 将逗号分隔的数字拆分为两列
【发布时间】:2017-10-25 21:58:30
【问题描述】:

我有一个包含整数的 A 列。在某些情况下,该列将包含一个以逗号分隔的两个整数列表,表示为一个字符串。

示例:1,2 。在这种情况下,我需要做两件事。

  1. 识别数据是否有逗号。如果未将值填充到 B 列。
  2. 如果确实有逗号,则需要将第一个数字填充到 C 列,将第二个数字填充到 B 列

如果有助于更好地理解问题,我们有一个数据供应商更新了他们数据中的 ID 字段。他们维护旧 ID 的想法是简单地列出它,后跟用逗号分隔的新 ID。为什么他们选择这样做而不是创建新列我不知道。我相信他们有他们的理由。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你可以这样做:

    select cast( (case when a like '%,%' then substring(a, charindex(',', a) + 1, len(a)) else a end) as int) b,
           cast( (case when a like '%,%' then left(a, charindex(',', a) - 1) end) as int) c
    

    当然,如果您希望值保持为字符串,cast() 是不必要的。

    【讨论】:

      【解决方案2】:

      您可以使用 RIGHT、LEFT 和 Charindex 的组合。

      DECLARE @temp TABLE (val varchar(10))
      INSERT INTO @temp VALUES ('5'), ('2,3'), ('0,40'), ('99,21'), ('100,25')
      
      SELECT val [A]
            ,CASE WHEN val LIKE '%,%' THEN RIGHT(val, Charindex(',', REVERSE(val)) - 1)
                  ELSE val 
              END [B]
            ,CASE WHEN val LIKE '%,%' THEN LEFT(val, Charindex(',', val) -1 )
              END [C]
        FROM @temp
      

      我使用了 Shashra 的问题,Martin Smith 回答了一个有点相关但不同的问题here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多