使用 SQL 检查列是不是包含文本
Posted
技术标签:
【中文标题】使用 SQL 检查列是不是包含文本【英文标题】:Check if a column contains text using SQL使用 SQL 检查列是否包含文本 【发布时间】:2013-06-23 17:16:11 【问题描述】:我有一个名为 studentID
的列,但我有 数百万 条记录,并且不知何故,应用程序在该列中输入了一些任意文本。
如何搜索:
SELECT *
FROM STUDENTS
WHERE STUDENTID CONTAINS TEXT
【问题讨论】:
检查这个link。我假设如果您使用 CONTAINS,则您使用的是全文目录。 您是在寻找“文本”还是在寻找任何非数字文本?这对您提出的问题有所不同。 其他可能有用的链接SQL Server LIKE vs CONTAINS. 当使用 TEXT 作为原始 SQL 时,确保它被转义,最好使用准备好的语句。 【参考方案1】:撇开数据库建模问题不谈。 我觉得你可以试试
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
【参考方案2】:
试试下面的脚本:
以下代码仅在 studentid 列数据类型为 varchar 时有效
SELECT * FROM STUDENTS WHERE STUDENTID like '%Searchstring%'
【讨论】:
【参考方案3】:尝试LIKE
构造,例如(假设StudentId
的类型为Char
、VarChar
等)
select *
from Students
where StudentId like '%' || TEXT || '%' -- <- TEXT - text to contain
【讨论】:
SqlServer 使用+
作为字符串连接运算符,而不是||
。 msdn.microsoft.com/en-us/library/ms190301.aspx【参考方案4】:
试试这个:
SElECT * FROM STUDENTS WHERE LEN(CAST(STUDENTID AS VARCHAR)) > 0
这样你就可以得到 STUDENTID 包含文本的行
【讨论】:
【参考方案5】:假设 STUDENTID 包含一些您已经知道的字符或数字,即“搜索字符串”,那么下面的查询将为您工作。
你可以试试这个:
select * from STUDENTS where CHARINDEX('searchstring',STUDENTID)>0
我认为这是最快最简单的一个。
【讨论】:
以上是关于使用 SQL 检查列是不是包含文本的主要内容,如果未能解决你的问题,请参考以下文章