选择具有多于/少于x个字符的内容

MNX*_*024 98 sql

想知道是否有可能在SQL中选择多于/少于x个字符的东西.

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

这是一个示例表

ID EmpName Dept
1  Johnny  ACC
2  Dan     IT
3  Amriel  PR
4  Amy     HR
Run Code Online (Sandbox Code Playgroud)

Jon*_*onH 162

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

SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4
Run Code Online (Sandbox Code Playgroud)

它的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/en/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


Lui*_*las 22

JonH非常清楚地介绍了如何编写查询.然而,还必须提到另一个重要问题,即这种查询的性能特征.我们在这里重复一遍(适用于Oracle):

SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Run Code Online (Sandbox Code Playgroud)

此查询限制施加到列值的函数的结果(将结果LENGTH函数到EmployeeName列).在Oracle中,可能在所有其他RDBMS中,这意味着EmployeeName上的常规索引将无法回答此查询; 数据库将进行全表扫描,这可能非常昂贵.

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

CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,这可能仍然无济于事,因为索引可能对您的情况没有选择性.我的意思是:你要求名称长度超过4的行.让我们假设该表中80%的员工姓名长于4.那么,数据库很可能会得出结论(正确地说,它不值得使用索引,因为它可能必须读取表中的大多数块.

但是,如果您更改了查询LENGTH(EmployeeName) <= 4,或者LENGTH(EmployeeName) > 35假设极少数员工的名称少于5个字符或超过35个,则会选择索引并提高性能.

无论如何,简而言之:要小心你正在尝试编写的查询的性能特征.


Vip*_*pin 5

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

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