使用 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 的类型为CharVarChar 等)

  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 检查列是不是包含文本的主要内容,如果未能解决你的问题,请参考以下文章

如何通过SQL查询检查列的数值是不是包含字母

SQL检查组是不是包含给定列的某些值(ORACLE)

oracle sql - 选择具有多个“case when”的语句并检查是不是包含文本

派斯帕克;用于检查列是不是包含列表元素之一的 UDF

如何检查 SQL 结果是不是包含换行符?

SQL Server 检查数据库视图中的所有列是不是有特定的字符串值