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

Sql server 将数据拆分为单独的列公式,sql-server,Sql Server,我们正在为学生使用一个外部测验工具,他们可以通过LMS中的链接访问该工具。当他们点击链接时,我们可以传递StudentID、CourseID、ModuleID等的参数。测验工具允许我们在一列中记录此变量,使其看起来像034-23-12或Student034-Course23-Module12等 使用Zapier,我们可以将结果添加到我们的MSSQL数据库中,然后结果可以显示在学生帐户上 然而,为了实现这一点,我们需要能够将单列记录拆分为3列—StudentID、CourseID和ModuleID

我们正在为学生使用一个外部测验工具,他们可以通过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
非常感谢您对本公式的任何帮助。

示例数据

    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

您可以使用“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)