将数据拆分为单独的列公式

时间:2017-07-13 06:40:09

标签: sql-server

我们正在为学生使用外部测验工具,他们可以通过LMS中的链接访问这些工具。当他们点击链接时,我们可以传递StudentID,CourseID,ModuleID等参数。测验工具允许我们将这个变量记录在一个列中,使它看起来像034-23-12或Student034-Course23-Module12等

使用Zapier,我们可以将结果添加到我们的MSSQL数据库中,然后结果可以显示在学生帐户上。

但是,为了完成这项工作,我们需要能够将单列记录拆分为3列 - StudentID,CourseID和ModuleID

QuizRecord    StudentID  CourseID ModuleID
034-23-12        34          23      12

非常感谢您对此公式的任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用'parsename',因为您有4个(或更少)拆分

声明@data varchar(20)

Set @data='034-23-12'

Select 
parsename(replace(@data,'-','.'),1),
parsename(replace(@data,'-','.'),2),
parsename(replace(@data,'-','.'),3),
parsename(replace(@data,'-','.'),4)

答案 1 :(得分:0)

样本数据

    DECLARE @Table TABLE (QuizRecord    varchar(100))
    INSERT INTO @Table 
    SELECT '034-23-12' UNION ALL   
    SELECT '035-24-13' UNION ALL
    SELECT '036-25-14' 

查询以多个

分割单个列
SELECT *
    ,REPLACE(SUBSTRING(QuizRecord, 0, CHARINDEX('-', QuizRecord)), 0, '') AS StudentID
    ,REPLACE(SUBSTRING(QuizRecord, CHARINDEX('-', QuizRecord), CHARINDEX('-', QuizRecord)), '-', '') AS CourseID
    ,REVERSE(SUBSTRING(REVERSE(QuizRecord), 0, CHARINDEX('-', REVERSE(QuizRecord)))) AS ModuleID
FROM @Table

结果

QuizRecord  StudentID   CourseID    ModuleID
--------------------------------------------
034-23-12    34             23          12
035-24-13    35             24          13
036-25-14    36             25          14