选择具有大于/小于 x 字符的内容

我想知道是否可以选择 SQL 中多于/少于 x 字符的内容。

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

这是一个示例表

ID EmpName Dept
1  Johnny  ACC
2  Dan     IT
3  Amriel  PR
4  Amy     HR
477263 次浏览

如果使用 SQLServer,请使用 LEN(长度)函数:

SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4

它的 MSDN 声明:

返回指定字符串表达式的字符数,
不包括尾部空白。

这是 MSDN 的链接

对于 Oracle/plsql,可以使用 Length(),mysql 也使用 Llength。

下面是甲骨文的文档:

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):

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) <= 4LENGTH(EmployeeName) > 35,假设很少有员工的名字少于5个字符或多于35个字符,那么索引将被选中并提高性能。

无论如何,简而言之: 要注意类似您试图编写的查询的性能特征。

今天我尝试在 db2中使用相同的命令,在我的示例中,varchar 列数据的末尾有空格

从 EmployeeTable 中选择 EmployeeName 长度(TRIM (员工姓名)) > 4;

如果在查询 DB2数据库时遇到同样的问题,则需要使用以下查询。

SELECT *
FROM OPENQUERY(LINK_DB,'SELECT
CITY,
cast(STATE as varchar(40))
FROM DATABASE')