选择大于/小于x字符的内容


109

想知道是否有可能在SQL中选择比x个字符多/少的字符。

例如,我有一个雇员表,我想显示其名称中具有超过4个字符的所有雇员名称。

这是一个示例表

ID EmpName Dept
1  Johnny  ACC
2  Dan     IT
3  Amriel  PR
4  Amy     HR

Answers:


181

如果使用的是SQL Server,请使用LEN(长度)函数:

SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4

MSDN指出:

返回指定字符串表达式的字符数,
不包括结尾的空格。

这是MSDN的链接

对于oracle / plsql,您可以使用Length(),mysql也使用Length。

这是Oracle文档:

http://www.techonthenet.com/oracle/functions/length.php

这是mySQL文档Length(string)

http://dev.mysql.com/doc/refman/5.1/zh-CN/string-functions.html#function_length

对于PostgreSQL,可以使用length(string)char_length(string)。这是PostgreSQL文档:

http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-SQL


1
对于复合不等式,只需添加一条AND语句即可,例如 SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
alexanderjsingleton

28

JonH很好地介绍了如何编写查询的部分。但是,还必须提到另一个重要问题,即这种查询的性能特征。让我们在这里重复一下(适用于Oracle):

SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;

该查询限制了将函数结果应用于列值(将LENGTH函数的结果应用于列值)EmployeeName列)。在Oracle中,并且可能在所有其他RDBMS中,这意味着EmployeeName上的常规索引将无法回答该查询。数据库将进行全表扫描,这可能会非常昂贵。

但是,各种数据库都提供了旨在加快此类查询速度的功能索引功能。例如,在Oracle中,您可以创建如下索引:

CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));

但是,这可能仍然对您没有帮助,因为索引对于您的病情可能不是非常有选择性。我的意思是:您要查询名称长度大于4的行。假设该表中80%的员工姓名大于4。那么,数据库很可能会得出结论(正确),不值得使用索引,因为无论如何它可能都必须读取表中的大多数块。

但是,如果将查询更改为LENGTH(EmployeeName) <= 4LENGTH(EmployeeName) > 35,假设很少有员工的姓名少于5个字符或超过35个,则可以选择索引并提高性能。

总之,总之:提防查询的性能特征,例如您要编写的查询。


5

今天我在db2中尝试相同的方法,并在下面使用,在我的情况下,varchar列数据的末尾有空格

从EmployeeTable中选择EmployeeName长度(TRIM(EmployeeName))> 4;


0

如果查询DB2数据库时遇到相同的问题,则需要使用以下查询。

SELECT * 
FROM OPENQUERY(LINK_DB,'SELECT
CITY,
cast(STATE as varchar(40)) 
FROM DATABASE')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.