将逗号分隔列转换为单个列

时间:2014-11-20 07:00:15

标签: sql-server

我正在查询页面,其中用户必须根据用户给出的文本框数量输入具有各自年龄的孩子的数量。如果用户输入3个孩子的数量,则输入年龄会出现3个文本框,如果用户输入4个孩子,则现在出现4个文本框我必须在单个字段中插入他们的年龄,如10,6,8,9。直到这一点,我没有问题。

问题是我必须从数据库中获取值并在不同的文本框中显示孩子的年龄。我有一个查询,如果我输入记录10,8,9可以正常工作,但如果我输入的值多于此值,则会出现问题。

我在这里写我的查询请在我的查询中进行全面更改,以便我可以获取超过3个值。提前谢谢。

select ID,
SUBSTRING(Value,1,charindex(',',Value)-1) as v1,
SUBSTRING (Value,(charindex(',',Value)+1),(len(Value)-charindex(',',reverse(Value))-CHARINDEX(',',Value))) as v2,
SUBSTRING (Value,(Len(Value)-charindex(',',reverse(Value))+2),len(Value)) as v3 
from Test where ID=2

2 个答案:

答案 0 :(得分:1)

 SELECT ID, LTRIM(x.XmlCol.value('.','varchar(100)')) 'Item'
    FROM 
    (
        SELECT ID, CAST('<A>'+REPLACE(Value,',','</A><A>')+'</A>' AS XML) 'ValueList'
        FROM Test) Mytab
    CROSS APPLY Mytab.ValueList.nodes('/A') x(xmlcol)
WHERE ID = 2

答案 1 :(得分:0)

您需要拆分字符串,查看以下答案:1234等。

然而,在服务器端动态扩展记录通常是一种不好的做法。此外,在一些大的选择上可能会非常慢。我建议修改你的数据库结构:

  1. 如果可能且最大项目数不能超过4,请为每个项目添加单独的字段。如果限制可能会发生变化,请考虑为通过FK链接的孩子添加单独的表格。
  2. 如果上述情况不可能,请考虑客户端拆分。