在SQL Server中将字段值转换为字符串

在SQL Server中将字段值转换为字符串,sql,sql-server,csv,concatenation,Sql,Sql Server,Csv,Concatenation,我需要一个与SQL Server中的OracleWM_CONCAT类似的函数,它返回一个逗号分隔的列表,其中包含作为参数传递的任何字段。例如,在Oracle中 select WM_CONCAT(first_name) from employee where state='CA' 返回“John,Jim,Bob” 如何在SQL Server中执行此操作 谢谢好的,你需要自己做 您可以构建一个用户定义的函数,该函数使用光标循环状态为CA的员工记录,并返回其姓名的串联。实际答案: SELECT

我需要一个与SQL Server中的Oracle
WM_CONCAT
类似的函数,它返回一个逗号分隔的列表,其中包含作为参数传递的任何字段。例如,在Oracle中

select WM_CONCAT(first_name) from employee where state='CA' 
返回“John,Jim,Bob”

如何在SQL Server中执行此操作


谢谢

好的,你需要自己做

您可以构建一个用户定义的函数,该函数使用光标循环状态为CA的员工记录,并返回其姓名的串联。

实际答案:

SELECT
   SUBSTRING(buzz, 2, 2000000000)
FROM
    (
    SELECT 
        firstname
    FROM 
        employee
    WHERE
        State = 'CA'
    FOR XML PATH (',')
    ) fizz(buzz)
这是一个常见的问题。一些搜索:

试试这个:


    drop table #mike_temp 
go

select * into #mike_temp 
  from (select 'Ken'  as firstname, 'CO' as state
         union all
        select 'Mike' as firstname, 'CO' as state
         union all
        select 'Tom' as firstname , 'WY' as state
       ) a
go

SELECT distinct 
       state
      ,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn
  from #mike_temp a
试试这个

 select    
    wm_concat(name) 
 from
    employee
 where
    state='CA'
 group by
    state
我从这个链接得到这个查询


在SQL Server 2017中添加了字符串\u AGG函数

SELECT t.name as TableName
      ,STRING_AGG(c.name, ';') AS FieldList
  FROM sys.tables t
  JOIN sys.columns c 
    ON t.object_id = c.object_id
  GROUP BY t.name;

不需要,根本不需要使用游标。值得注意的是,这仅对SQL Server 2005及更高版本有效。OP没有说明他们使用的是哪个版本的SQL Server。您可以使用STUFF命令替换子字符串,该命令将正常运行,而无需知道字符串长度。@Chris J:我认为SQL 2k5是一个合理的假设,即SQL 2000 RTM和2.5版本之后的10年后的2147483647是您的朋友。。。记住它,这是不对的。正如OP所指出的,它在SQL Server中不起作用。您可能希望删除它,或者编辑它,如果您的意思不同?
SELECT t.name as TableName
      ,STRING_AGG(c.name, ';') AS FieldList
  FROM sys.tables t
  JOIN sys.columns c 
    ON t.object_id = c.object_id
  GROUP BY t.name;