使用SQL检查列中是否包含文本

40

我有一个名为studentID的列,但是我有数百万条记录,某些应用程序在该列中输入了一些任意文本

我如何搜索:

SELECT *
  FROM STUDENTS
 WHERE STUDENTID CONTAINS TEXT

1
请查看此链接:https://dev59.com/inVC5IYBdhLWcg3wcgmd。我假设如果您使用 CONTAINS,您正在使用全文目录。 - Gaston Flores
你是在寻找“文本”还是任何非数字文本?这对你所提出的问题有影响。 - Michael J Swart
其他可能有用的链接SQL Server LIKE vs CONTAINS - Gaston Flores
在使用TEXT作为原始SQL时,确保进行转义,最好使用预处理语句。 - Cees Timmerman
6个回答

51

撇开数据库建模问题不谈, 我认为你可以尝试

SELECT * FROM STUDENTS WHERE ISNUMERIC(STUDENTID) = 0

但是ISNUMERIC对于任何看起来是数字的值都返回1,包括像-1.0e5这样的东西。

如果您想排除仅由数字组成的学生ID,请尝试类似以下内容的内容

SELECT * FROM STUDENTS WHERE STUDENTID LIKE '%[^0-9]%'

ISNUMERIC返回1/0,必须使用"WHERE ISNUMERIC(STUDENTID) <> 1"。 - Hart CO

28

请尝试以下脚本:

下面的代码仅在 studentid 列的数据类型为 varchar 时有效。

SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'

14

尝试使用LIKE语句,例如(假设StudentIdCharVarChar等类型)

  select * 
    from Students
   where StudentId like '%' || TEXT || '%' -- <- TEXT - text to contain

8
SqlServer使用+作为字符串连接运算符,而不是||。https://msdn.microsoft.com/en-us/library/ms190301.aspx - Hans Kesting

2

试试这个:

SElECT * FROM STUDENTS WHERE LEN(CAST(STUDENTID AS VARCHAR)) > 0

使用此方法可以获取包含指定文本的STUDENTID行。


1

从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
或任何前缀

在这种情况下,% 的作用类似于 * 通配符,只是针对字符串。


-2
假设STUDENTID包含一些你已经知道的字符或数字,即“searchstring”,那么下面的查询将适用于你。
你可以尝试这个:
select * from STUDENTS where CHARINDEX('searchstring',STUDENTID)>0

我认为这个是最快和最容易的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接