首页 > 解决方案 > 字符串到行的转换 SQL Server

问题描述

我们如何将以下输入转换为 SQL Server 中的一行?

'e4lu50', 'e4lu10', 'e4lu11', 'e4de11', 'e4de12', 'e4nl51', 'e4es11'

预期产出

e4lu50
e4lu10
e4lu11
e4de11
e4de12
e4nl51
e4es11

我有一个功能

 CREATE FUNCTION [dbo].[BreakStringIntoRows] 
     (@CommadelimitedString VARCHAR(1000))  
 RETURNS   
     @Result TABLE (Column1 INT)  
 AS  
 BEGIN  
     DECLARE @IntLocation INT  

     WHILE (CHARINDEX(',', @CommadelimitedString, 0) > 0)  
     BEGIN  
         SET @IntLocation = CHARINDEX(',', @CommadelimitedString, 0)        

         INSERT INTO @Result (Column1)  
             --LTRIM and RTRIM to ensure blank spaces are removed
             SELECT 
                 RTRIM(LTRIM(SUBSTRING(@CommadelimitedString, 0, @IntLocation)))     

             SET @CommadelimitedString = STUFF(@CommadelimitedString, 1, @IntLocation, '')
     END  

     INSERT INTO @Result (Column1)  
         SELECT RTRIM(LTRIM(@CommadelimitedString))--LTRIM and RTRIM to ensure blank spaces are removed  

     RETURN   
 END       

和一个查询,但问题是它不接受带引号的输入

WITH SEG(aa) AS
(
    SELECT
        BreakStringIntoRows ('e4lu50', 'e4lu10', 'e4lu11', 'e4de11',
                             'e4de12', 'e4nl51', 'e4es11', 'e4it11')
)
SELECT * 
FROM SEG

标签: sqlsql-serversplit

解决方案


你没有一个字符串,你有一组用逗号分隔的 8 个字符串。如果您想坚持自己的功能,请将其称为:

with SEG(aa) as 
(select BreakStringIntoRows ('e4lu50,e4lu10,e4lu11,e4de11,e4de12,e4nl51,e4es11')
SELECT * from SEG

由于您直接在查询中指定字符串,这可行吗?如果没有,请在调用之前使用 REPLACE() 函数去除引号。


推荐阅读