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 运算符的基础知识的主要内容,如果未能解决你的问题,请参考以下文章