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个,则索引将被挑选并改进性能。

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

  • MySQL SELECT * WHERE timestamp = TODAY
  • 为什么在其他唯一字段存在时使用自动递增主键?
  • 子查询vs连接
  • 具有可变列名称的dynamic更新语句
  • 以表格格式获取sql查询结果
  • 从存储过程Transact-SQL SQL Server中访问结果集
  • 如何select一个表中不存在于另一个表中的所有logging?
  • 在SQL Server中将varchar转换为datetime
  • 改变一个SQL服务器函数来接受新的可选参数
  • select* vsselect列
  • 在Oracle中将string拆分为多行