select比x更多/更less的字符

想知道是否可以在SQL中select多于/less于x个字符的东西。

例如,我有一个员工表,我想显示名称中包含4个以上字符的所有员工姓名。

这是一个示例表

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

2 Solutions collect form web for “select比x更多/更less的字符”

如果您正在使用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个,则索引将被挑选并改进性能。

无论如何,简而言之,要小心诸如你正在编写的那些查询的性能特征。

  • CakePHP使用JOIN查找方法
  • 将许多行连接成单个文本string?
  • 哪个更好:书签/密钥查找或索引扫描
  • 我如何查询SQL Server XML列中的值
  • MySQL - 多less列太多了?
  • 计算两个date之间的时间差(分钟)
  • 一对多和多对一的关系之间的区别
  • 如果返回值为null,postgresql返回0
  • 从表中select1是什么意思?
  • 删除名称以特定string开头的所有表
  • 如何在SQL Server 2008中检查用户定义表types的存在?