x文字より多い/少ない文字を選択してください


109

SQLでx文字より多い/少ない文字を選択できるかどうか疑問に思っていました。

たとえば、従業員テーブルがあり、名前に4文字を超えるすべての従業員名を表示したいとします。

ここにテーブルの例があります

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

回答:


180

SQL Serverを使用している場合は、LEN(長さ)関数を使用します。

SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4

それのための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


1
複合不等式の場合は、単にANDステートメントを追加します SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
alexanderjsingleton

28

JonHは、クエリの記述方法について非常によく説明しています。ただし、言及しなければならない重要な問題がもう1つあります。これは、そのようなクエリのパフォーマンス特性です。ここで繰り返しましょう(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) <= 4、またはLENGTH(EmployeeName) > 35に変更した場合、5文字未満または35文字を超える名前を持つ従業員が非常に少ないと想定すると、インデックスが選択され、パフォーマンスが向上します。

とにかく、要するに、作成しようとしているクエリのようなクエリのパフォーマンス特性に注意してください。


5

今日私はdb2で同じことを試していて、以下で使用しました、私の場合、varchar列データの最後にスペースがありました

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


0

DB2データベースのクエリ中に同じ問題が発生する場合は、以下のクエリを使用する必要があります。

SELECT * 
FROM OPENQUERY(LINK_DB,'SELECT
CITY,
cast(STATE as varchar(40)) 
FROM DATABASE')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.