Answers:
如果使用的是SQL Server,请使用LEN
(长度)函数:
SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4
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
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) <= 4
或LENGTH(EmployeeName) > 35
,假设很少有员工的姓名少于5个字符或超过35个,则可以选择索引并提高性能。
总之,总之:提防查询的性能特征,例如您要编写的查询。
AND
语句即可,例如SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;