想知道是否有可能在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声明:
返回指定字符串表达式的字符数,
不包括尾随空格.
对于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个,则会选择索引并提高性能.
无论如何,简而言之:要小心你正在尝试编写的查询的性能特征.
今天我在 db2 中尝试相同并在下面使用,在我的情况下,我在 varchar 列数据的末尾有空格
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(TRIM(EmployeeName))> 4;
| 归档时间: |
|
| 查看次数: |
298170 次 |
| 最近记录: |