select比x更多/更less的字符
想知道是否可以在SQL中select多于/less于x个字符的东西。
例如,我有一个员工表,我想显示名称中包含4个以上字符的所有员工姓名。
这是一个示例表
ID EmpName Dept 1 Johnny ACC 2 Dan IT 3 Amriel PR 4 Amy HR
如果您正在使用SQL Server,请使用LEN
(长度)函数:
SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4
MSDN为它指出:
返回指定stringexpression式的字符数,
不包括尾随空白。
这里是MSDN的链接
对于oracle / plsql你可以使用Length()
,mysql也使用Length。
这里是Oracle文档:
http://www.techonthenet.com/oracle/functions/length.php
这里是Length(string)
的mySQL文档:
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_length
对于PostgreSQL,您可以使用length(string)
或char_length(string)
。 这里是PostgreSQL文档:
http://www.postgresql.org/docs/9.0/interactive/functions-string.html#FUNCTIONS-STRING-SQL
JohnH已经很好地阐述了如何编写查询的部分。 还有一个值得提及的重要问题,那就是这样的查询的性能特点。 让我们在这里重复一遍(适用于Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
此查询限制应用于列值的函数的结果(将LENGTH
函数应用于EmployeeName
列的结果)。 在Oracle中,也可能在所有其他RDBMS中,这意味着EmployeeName上的常规索引将无用以回答此查询; 数据库将做一个完整的表扫描,这可能是非常昂贵的。
然而,各种数据库提供了一个function索引function,旨在加快这样的查询。 例如,在Oracle中,可以像这样创build一个索引:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
但是,这可能对您的情况仍然没有帮助,因为索引可能不会对您的情况非常有select性。 通过这个我的意思是以下内容:你要求的名字的长度超过4的行。让我们假设该表中80%的员工姓名长于4.那么,数据库可能会结束(正确),这是不值得使用的索引,因为它可能会不得不阅读表中的大部分块。
但是,如果您将查询更改为LENGTH(EmployeeName) <= 4
,或LENGTH(EmployeeName) > 35
,则假定只有极less数员工的姓名less于5个字符或超过35个,则索引将被挑选并改进性能。
无论如何,简而言之,要小心诸如你正在编写的那些查询的性能特征。