【问题标题】:Removing trailing comma sql删除尾随逗号 sql
【发布时间】:2017-11-06 13:23:04
【问题描述】:

我知道这已经发布了一百万次,但我不知道如何删除此示例中的尾随逗号。我不想创建一个新列,我只想遍历每一列,解析逗号分隔符列表并打印出这些代码及其描述。

例如,如果列表是 GLU、VEG,那么我希望它打印: 无麸质,素食主义者。但是,我 fwr “不含麸质,素食主义者”,请注意最后的逗号。

这是我目前拥有的:

SELECT *,
    CASE WHEN( RE.FOODOPTIONS LIKE '%GLU%') THEN 'Gluten free,'
                  WHEN( RE.FOODOPTIONS LIKE '%ALL%') THEN 'Food Allergies,'
                  WHEN( RE.FOODOPTIONS LIKE '%VEG%') THEN 'Vegetarian,'
                  WHEN( RE.FOODOPTIONS LIKE '%OTHER%') THEN 'Other,'
    END
FROM RegExt AS RE 

谢谢。

样本数据:

FOODOPTIONS: GLU, ALL, VEG 
Results: Gluten free, Food Allergies, Vegetarian,
Desired Results: Gluten free, Food Allergies, Vegetarian

FOODOPTIONS: GLU
Results: Gluten free,
Desired Results: Gluten free

FOODOPTIONS: GLU, VEG 
Results: Gluten free, Vegetarian,
Desired Results: Gluten free, Vegetarian

FOODOPTIONS 的值是由逗号分隔的代码列表。它能够列出它们,但在末尾包含逗号。

【问题讨论】:

  • 我正在使用 SQL Server。应该包括那个开始。
  • 您是否希望在映射中同时具有 '%GLU%' 和 '%VEG%' ?
  • 扩展 B House 的问题 - CASE 语句一旦满足“真”条件就会停止评估。所以像'GLU,VEG'这样的字符串只会返回'Gluten Free'(因为GLU是你的CASE语句中的第一个测试条件。到目前为止(Leonhard&Gordon)的两个答案都避免了这种情况,并将成功解析'GLU'的字符串,蔬菜'。
  • 奇怪的是我的原件确实解析了它,但它在末尾留下了逗号,因为我已将它包含在字符串中。我从没想过要双重反转它。我专注于使用 SUBSTRING 删除最后一个字符。这真的很聪明,很容易理解!感谢您的所有回复!

标签: sql sql-server


【解决方案1】:

您可以使用IIF,连接字符串并截取最后一个字符

SELECT *,
reverse(stuff(reverse(
    IIF(FOODOPTIONS LIKE '%GLU%', 'Gluten free,', '')+
    IIF(FOODOPTIONS LIKE '%ALL%', 'Food Allergies,', '')+
    IIF(FOODOPTIONS LIKE '%VEG%', 'Vegetarian,', '')+
    IIF(FOODOPTIONS LIKE '%OTHER%', 'Other,', '')
), 1, 1, ''))
FROM RegExt;

因为你不知道你的字符串的长度,你可以把字符串倒过来,把第一个字符切掉,然后再倒过来。

【讨论】:

    【解决方案2】:

    我使用stuff()

    SELECT re.*,
           STUFF( (CASE WHEN RE.FOODOPTIONS LIKE '%GLU%' THEN ',Gluten free' ELSE '' END) +
                   CASE WHEN RE.FOODOPTIONS LIKE '%ALL%' THEN ',Food Allergies' ELSE '' END) +
                   CASE WHEN RE.FOODOPTIONS LIKE '%VEG%' THEN ',Vegetarian'  ELSE '' END) +
                   CASE WHEN RE.FOODOPTIONS LIKE '%OTHER%' THEN ',Other'  ELSE '' END
                  ), 2, LENGTH(RE.FOODOPTIONS), ''
                 )
    FROM RegExt AS RE
    

    【讨论】:

      【解决方案3】:

      你可能会使用 REPLACE 三次?

      DECLARE @FoodOptions varchar(100) = 'GLU, VEG'    
      SELECT REPLACE( REPLACE( REPLACE (@FoodOptions, 'GLU', 'Gluten free'), 'ALL', 'Food Alergies'), 'VEG', 'Vegetarian') AS [ColumnName]
      

      给出输出:

      ColumnName
      Gluten free, Vegetarian
      

      【讨论】:

        猜你喜欢
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 2017-01-10
        相关资源
        最近更新 更多