29

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

如何搜索:

SELECT *
  FROM STUDENTS
 WHERE STUDENTID CONTAINS TEXT
4

6 回答 6

45

撇开数据库建模问题不谈。我觉得你可以试试

SELECT * FROM STUDENTS WHERE ISNUMERIC(STUDENTID) = 0

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

如果您想排除仅限数字的学生,请尝试类似

SELECT * FROM STUDENTS WHERE STUDENTID LIKE '%[^0-9]%'
于 2013-06-26T14:06:43.823 回答
21

只需尝试以下脚本:

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

SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'
于 2013-06-26T14:04:52.977 回答
12

尝试LIKE构造,例如(假设StudentId是 typeCharVarChar

  select * 
    from Students
   where StudentId like '%' || TEXT || '%' -- <- TEXT - text to contain
于 2013-06-26T14:04:35.727 回答
0

试试这个:

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

有了这个,你得到 STUDENTID 包含文本的行

于 2013-06-26T14:37:40.943 回答
0

来自bgs的即兴演奏,请先投票。
我只是想扩展它

SELECT * FROM STUDENTS WHERE STUDENTID == 'Searchstring'

只会找到搜索字符串

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

将找到
1 Searchstring 1
2 Searchstring 2
3Searchstring3
等 Searchstring 等

SELECT * FROM STUDENTS WHERE STUDENTID like 'Searchstring%'

将找到
Searchstring 1
Searchstring 2
SearchstringEtc
将找不到
1 Searchstring 1
或任何前缀

在这种情况下,% 的使用与 * 通配符相同,只是在这种情况下用于字符串。

于 2022-02-11T12:57:14.373 回答
-1

假设 STUDENTID 包含一些您已经知道的字符或数字,即“搜索字符串”,那么下面的查询将为您工作。

你可以试试这个:

select * from STUDENTS where CHARINDEX('searchstring',STUDENTID)>0

我认为这是最快和最简单的一个。

于 2019-10-02T09:29:34.713 回答