SQL查询计算字符串

时间:2015-09-03 18:14:36

标签: sql-server

我已在主板和其他地方寻找答案 - 我猜这个问题已经解决了,但由于某种原因,我找不到我需要的东西......所以,我我会问并希望这不是一个重复的问题。

我所拥有的是MSSQL数据库中的学生和员工列表。其中一列包含一个包含当前术语(学期)的字符串,其中包含学生注册的每个班级的标识符,由“;”分隔对于每个条目。

我想弄清楚的是如何返回在本学期注册超过4个班级的学生的价值。要计算当前学期注册的所有学生的数量,查询很简单:

SELECT COUNT(*) AS Current_Students
FROM UserData
WHERE StuTermClassString LIKE '%2163%'

这可以很好地返回学生总数,但我需要一种方法来返回全日制学生的价值(那些每学期超过11学时的学生,通常是4 +班)。所以我需要一种方法来确定记录的'%2163%'的类数何时为>如果我没有充分解释这个问题,请告诉我,我会更多地进行扩展。谢谢!

2 个答案:

答案 0 :(得分:0)

直接回答您的问题:

WHERE StuTermClassString LIKE "%2163%;%;%;%;%"< - 假设学期指示符在类名之前,并且每个类名后面都有分号。

但是,我可以建议更合理的数据库结构吗?您可以拥有第二个注册表,而不是在您的Student表中有一列包含; -delimited类名称,其中每一行都有一个学生ID(指学生表中的一行),一个学期编号,和一个类名。这样,您可以通过以下方式查询具有超过一定数量类别的学生:

SELECT student_id FROM Registrations WHERE semester_number = "2163" GROUP BY student_id HAVING COUNT(student_id) > 3

答案 1 :(得分:0)

不幸的是,处理在SQL中打包成字符串的伪数组。

您需要创建一个字符串拆分函数来解析列表字符串中的各个项目,并将它们显示为表格变量。

请参阅:http://sqlperformance.com/2012/07/t-sql-queries/split-strings

有很多方法可以做到这一点,但你应该得到一个表变量,它可以使用标准的内置面向集合的SQL函数来找到你需要的东西。