我有一个名为 的列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
如果您想排除仅限数字的学生,请尝试类似
SELECT * FROM STUDENTS WHERE STUDENTID LIKE '%[^0-9]%'
只需尝试以下脚本:
以下代码仅在 studentid 列数据类型为 varchar 时有效
SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'
尝试LIKE
构造,例如(假设StudentId
是 typeChar
等VarChar
)
select *
from Students
where StudentId like '%' || TEXT || '%' -- <- TEXT - text to contain
试试这个:
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 Searchstring 1
2 Searchstring 2
3Searchstring3
等 Searchstring 等
SELECT * FROM STUDENTS WHERE STUDENTID like 'Searchstring%'
将找到
Searchstring 1
Searchstring 2
SearchstringEtc
将找不到
1 Searchstring 1
或任何前缀
在这种情况下,% 的使用与 * 通配符相同,只是在这种情况下用于字符串。
假设 STUDENTID 包含一些您已经知道的字符或数字,即“搜索字符串”,那么下面的查询将为您工作。
你可以试试这个:
select * from STUDENTS where CHARINDEX('searchstring',STUDENTID)>0
我认为这是最快和最简单的一个。