Sql server SQL按固定长度拆分逗号分隔的字符串

Sql server SQL按固定长度拆分逗号分隔的字符串,sql-server,string,csv,tsql,Sql Server,String,Csv,Tsql,我有一个逗号分隔的值字符串,我正在将这些值加载到一个系统中,该系统具有我需要遵守的最大长度。一旦字符串达到最大长度,它应将值移动到另一列,但保留值。对于下面的示例,我只需要将字符串拆分为两列 例如,我的字符串值=val1、val2、val3、val4、val5 输出字段的最大长度=15 输出应为两列: ValueList1 ValueList2 val1,val2,val3 val4,val5 我正试图用T-SQL来完成这项工作,但这不是我需要解决的常见

我有一个逗号分隔的值字符串,我正在将这些值加载到一个系统中,该系统具有我需要遵守的最大长度。一旦字符串达到最大长度,它应将值移动到另一列,但保留值。对于下面的示例,我只需要将字符串拆分为两列

例如,我的字符串值=
val1、val2、val3、val4、val5

输出字段的最大长度=15

输出应为两列:

ValueList1             ValueList2
val1,val2,val3         val4,val5
我正试图用T-SQL来完成这项工作,但这不是我需要解决的常见问题,我被难住了。任何帮助都将不胜感激。

您可以试试这个

DECLARE @stringvalue VARCHAR(5000) = 'val1,val2,val3,val4,val5'
DECLARE @MaxLengthofOutputFields INT = 15

SELECT 
    CASE WHEN LEN(@stringvalue) > @MaxLengthofOutputFields 
        THEN LEFT(@stringvalue, @MaxLengthofOutputFields - CHARINDEX(',',REVERSE(LEFT(@stringvalue,@MaxLengthofOutputFields)))) 
        ELSE @stringvalue END   , 
    CASE WHEN LEN(@stringvalue) > @MaxLengthofOutputFields THEN 
        SUBSTRING(@stringvalue, @MaxLengthofOutputFields - CHARINDEX(',',REVERSE(LEFT(@stringvalue,@MaxLengthofOutputFields))) + 2, LEN(@stringvalue)) 
        END
结果:

-------------------- -------------
val1,val2,val3       val4,val5
你可以试试这个

DECLARE @stringvalue VARCHAR(5000) = 'val1,val2,val3,val4,val5'
DECLARE @MaxLengthofOutputFields INT = 15

SELECT 
    CASE WHEN LEN(@stringvalue) > @MaxLengthofOutputFields 
        THEN LEFT(@stringvalue, @MaxLengthofOutputFields - CHARINDEX(',',REVERSE(LEFT(@stringvalue,@MaxLengthofOutputFields)))) 
        ELSE @stringvalue END   , 
    CASE WHEN LEN(@stringvalue) > @MaxLengthofOutputFields THEN 
        SUBSTRING(@stringvalue, @MaxLengthofOutputFields - CHARINDEX(',',REVERSE(LEFT(@stringvalue,@MaxLengthofOutputFields))) + 2, LEN(@stringvalue)) 
        END
结果:

-------------------- -------------
val1,val2,val3       val4,val5

您是否更关心性能或保持原始值序列?您可能必须放弃其中一个。老实说,在应用程序中,或者使用CLR函数时,这可能会执行得更好。性能不是问题,不是大量数据,也不需要扩展SQL Server版本是什么?SQL Server 2012 SP4(11.0.7001.0)您是否更关心性能或保持原始值序列?您可能必须放弃其中一个。老实说,在应用程序中,或者使用CLR函数时,这可能会执行得更好。性能不是问题,不是大量数据,也不需要扩展SQL Server版本是什么?SQL Server 2012 SP4(11.0.7001.0)我想我应该能够使用它,谢谢!然而,我用一个较长的字符串测试了这个问题,它在第一个输出的末尾留下了一个逗号。您知道为什么会这样吗?是否可以共享字符串?因为,字符串的长度小于maxlength限制。我在脚本中添加了一个长度控制。太棒了,这太完美了。我想我应该可以使用它,谢谢!然而,我用一个较长的字符串测试了这个问题,它在第一个输出的末尾留下了一个逗号。您知道为什么会这样吗?是否可以共享字符串?因为,字符串的长度小于maxlength限制。我在脚本中添加了一个长度控件太棒了,这太完美了