【问题标题】:How to add comma and and in String in SQL如何在SQL中的String中添加逗号和和
【发布时间】:2016-08-29 13:04:13
【问题描述】:

我在 SQL Item_Name 中有一个字段,行为 ITEM1、ITEM2、ITEM3 和 ITEM4 我将这些行转换为带有逗号分隔值的单列,例如 ITEM1、ITEM2、ITEM3、ITEM4。我怎样才能将此列转换为 ITEM1、ITEM2、ITEM3 和 ITEM4。我需要一个和最后的项目。可以循环使用replace吗?

这是我的场景。 一切都是关于课程和必修课程

COURSE_ID PRE_COURSE_ID 操作员 ------------------------------------------ IT105 IT100 和 IT105 IT101 IT106 1T103 BM110 BM101 和 BM110 BM102 和 BM110 BM103 CC107 CC103 或 CC107 CC104 -------------------------------------------------- -----

现在我期待如下输出;

COURSE_ID PRE_COURSE_ID ---------------------- IT105 IT100 和 IT101 IT106 IT103 BM110 BM101、BM102 和 BM103 CC107 CC103 或 CC104

即使有两个以上的课程,对于运算符“或”也不需要逗号。

【问题讨论】:

  • 你为什么将它存储为单个值?保持原样并将其存储在多行中。
  • 谢谢蒂姆,如果我的问题不清楚,我很抱歉。我会解释一下
  • 您使用的是哪个 DBMS?

标签: sql loops replace sql-server-2012


【解决方案1】:

我同意 Tim 的观点,您不应该尝试将值存储为逗号分隔值。以后会给你带来很多问题。

但如果你想知道如何做到这一点,那么你可以在 Sql Server 中这样尝试:

declare @str varchar(1000)

SELECT @str= coalesce(@str + ', ', '') + x.mycol
FROM (SELECT DISTINCT mycol from mytable) x

print @str 

【讨论】:

  • 谢谢拉胡尔。抱歉,我的问题不清楚。让我用一个清晰​​的场景来解释。它是关于操作员的课程和先决条件。表格如下。
【解决方案2】:

试试这个:

CREATE TABLE #tmp (name NVARCHAR(10))

INSERT INTO #tmp VALUES('ITEM1'),('ITEM2'),('ITEM3')

    SELECT STUFF((
            SELECT *
            FROM (
                SELECT ',' + name AS [text()]
                FROM #tmp
            )q
            FOR XML PATH('')
            ),1,1,'')
    DROP TABLE #tmp

【讨论】:

  • 谢谢Chanom,我把你的答案改成了`SELECT STUFF((SELECT * FROM (SELECT ' and '+ name AS [text()] FROM #tmp)q FOR XML PATH('')) ,1,4,'') ` 这将给我 ITEM1 和 ITEM2 和 ITEM3.Bit 我需要输出为 ITEM1 , ITEM2 和 ITEM3。感谢您的时间和帮助
猜你喜欢
  • 2019-07-06
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多