我有一个名为studentID
的列,但是我有数百万条记录,某些应用程序在该列中输入了一些任意文本。
我如何搜索:
SELECT *
FROM STUDENTS
WHERE STUDENTID CONTAINS TEXT
我有一个名为studentID
的列,但是我有数百万条记录,某些应用程序在该列中输入了一些任意文本。
我如何搜索:
SELECT *
FROM STUDENTS
WHERE STUDENTID CONTAINS TEXT
撇开数据库建模问题不谈, 我认为你可以尝试
SELECT * FROM STUDENTS WHERE ISNUMERIC(STUDENTID) = 0
但是ISNUMERIC
对于任何看起来是数字的值都返回1,包括像-1.0e5
这样的东西。
如果您想排除仅由数字组成的学生ID,请尝试类似以下内容的内容
SELECT * FROM STUDENTS WHERE STUDENTID LIKE '%[^0-9]%'
请尝试以下脚本:
下面的代码仅在 studentid 列的数据类型为 varchar 时有效。
SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'
尝试使用LIKE
语句,例如(假设StudentId
是Char
、VarChar
等类型)
select *
from Students
where StudentId like '%' || TEXT || '%' -- <- TEXT - text to contain
+
作为字符串连接运算符,而不是||
。https://msdn.microsoft.com/en-us/library/ms190301.aspx - Hans Kesting试试这个:
SElECT * FROM STUDENTS WHERE LEN(CAST(STUDENTID AS VARCHAR)) > 0
使用此方法可以获取包含指定文本的STUDENTID行。
从bgs的基础上延伸,先给他们点赞。
我只是想进一步扩展它。
SELECT * FROM STUDENTS WHERE STUDENTID == 'Searchstring'
仅会查找搜索字符串
SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'
将会找到以下内容:
1 搜索字符串 1
2 搜索字符串 2
3 搜索字符串 3
等等,搜索字符串等等
SELECT * FROM STUDENTS WHERE STUDENTID like 'Searchstring%'
将会找到以下内容:
搜索字符串1
搜索字符串2
搜索字符串Etc
不会找到以下内容:
1 搜索字符串1
或任何前缀
在这种情况下,% 的作用类似于 * 通配符,只是针对字符串。
select * from STUDENTS where CHARINDEX('searchstring',STUDENTID)>0
我认为这个是最快和最容易的。