like 运算符的基础知识

Posted

技术标签:

【中文标题】like 运算符的基础知识【英文标题】:the basics of the like operator 【发布时间】:2018-02-26 18:54:17 【问题描述】:

我如何编写一个查询来检索正好五个字母的模式。 我有这个问题要回答: 列出其名称恰好由 5 个字母组成的所有客户名称。 我写的查询是这样的:

SELECT ContactName
From Customers
 WHERE ContactName LIKE '[A-Z][A-Z][A-Z][A-Z][A-Z]'

谢谢

【问题讨论】:

这似乎是合理的。如果您有区分大小写的排序规则,您可能还想包含小写。 有多种方法。你所做的方式是一种。您还可以使用 LEN()LIKE 运算符。像... ContactName not like '%[^a-z]%' and Len(ContactName) = 5 为了解决区分大小写的排序规则,在我上面的评论中添加Lower(ContactName) 【参考方案1】:
SELECT ContactName
FROM Customers
WHERE LEN(ContactName) = 5 AND ContactName Not LIKE '%[0-9]%' AND ContactName Not LIKE '%[^a-zA-Z0-9]%'

我没有测试过,但是应该可以的

我的方法是检查长度应该等于 5 并且不应该包含任何数字或特殊字符。

我得到了帮助 How to detect if a string contains at least a number?

也参考自 How to detect if a string contains special characters? 并阅读

https://www.educative.io/edpresso/what-is-not-like-operator-in-sql

【讨论】:

ContactName 应该是 5 个字母,不是任何字符,而是字母 另一个 And with Not LIKE '%[^a-zA-Z0-9]%' @Martin 我已经更新了答案并添加了对代码来源的参考,以便对其他用户有所帮助 您的最后两个论点适得其反;您正在设置列是否不是数字,然后您正在检查列是数字还是字母....下定决心! @Martin 用 ^ 仔细查看它的 %[^a-zA-Z0-9]%【参考方案2】:
SELECT ContactName
FROM Customers
WHERE LEN(ContactName) = 5

【讨论】:

ContactName 应该是 5 个字母,不是任何字符,而是字母。【参考方案3】:

试试这个查询:

SELECT *
FROM table_name 
WHERE LEN(customer_name) = 5

【讨论】:

【参考方案4】:
SELECT ContactName
From Customers
WHERE ContactName LIKE '_%_%_%_%_%'

长度为 5 的任意字符

【讨论】:

这对于非字母字符也会返回误报。 因为“%”,这将匹配 至少 t 个字符

以上是关于like 运算符的基础知识的主要内容,如果未能解决你的问题,请参考以下文章

SQL 基础正则表达式(二十三)

单表查询基础内容

第七章 MySQL基础

1. SQL基础查询操作运算讲解

SQLite基础-7.子句

Sql基础