TSQL - 如何在多行中搜索字符串?

时间:2015-08-20 17:46:32

标签: sql sql-server tsql

我不确定如何让SQL做我想弄清楚的事情。我有一个学生,根据他们的年级,将在三所学校之一(schoolid)。

我需要根据年级水平仅返回学生目前所在学校的StudentID和SchoolID。我该如何以这种方式搜索?

enter image description here

期望的结果(学生在12年级,因此学校ID是500):

enter image description here

SQL Fiddle

谢谢。

3 个答案:

答案 0 :(得分:2)

where GradesOfferedInSchool like '%' + cast(StudentCurrentGrade as varchar(max)) + '%'

但这是一个糟糕的数据设计 不应该在一列中有多个值

这仍然只是一个黑客,因为这会发现' 12b'

如果这是一个视图,那么查找标准化数据
更好但仍然是黑客

 where GradesOfferedInSchool like '% ' + cast(StudentCurrentGrade as varchar(max)) + ', %'
    or GradesOfferedInSchool like cast(StudentCurrentGrade as varchar(max)) + ', %'
    or GradesOfferedInSchool like '%, ' + cast(StudentCurrentGrade as varchar(max))
    or GradesOfferedInSchool = cast(StudentCurrentGrade as varchar(max))

答案 1 :(得分:1)

这适用于我使用Microsoft SQL Server。需要CAST,否则由于字段的数据类型不同而引发错误。

SELECT
 StudentID,
 SchoolID

FROM dbo.StudentFeederPatterns
WHERE GradesOfferedInSchool LIKE '%' + CAST(StudentCurrentGrade AS VARCHAR) + '%'

SQL Fiddle

答案 2 :(得分:0)

很奇怪为什么你在[StudentCurrentGrade]上做INT,其中'PK'和'KK'是它的选项 无论如何:

SELECT [StudentID]
     , [SchoolID]
     , [GradesOfferedInSchool]
     , [StudentCurrentGrade]
  FROM [dbo].[StudentFeederPatterns]
 WHERE CHARINDEX( CAST([StudentCurrentGrade] AS VARCHAR)
                  , [GradesOfferedInSchool]) > 0