web-dev-qa-db-ja.com

WHERE条件を文字の長さに照会しますか?

多数の単語を含むデータベースがありますが、文字の長さが特定の数に等しいレコードのみを選択したい(例3):

$query = ("SELECT * FROM $db WHERE conditions AND length = 3");

しかし、これは機能しません...誰かが正しいクエリを見せてもらえますか?

59
faq

申し訳ありませんが、あなたが話しているSQLプラットフォームがわかりませんでした。

MySQLの場合:

$query = ("SELECT * FROM $db WHERE conditions AND LENGTH(col_name) = 3");

mSSQLで

$query = ("SELECT * FROM $db WHERE conditions AND LEN(col_name) = 3");

LENGTH()(MySQL)またはLEN()(MSSQL)関数は、WHERE句の条件として使用できる列の文字列の長さを返します。

編集

私はこれが本当に古いことを知っていますが、パウロ・ブエノが正しく指摘したように、あなたはおそらくバイト数ではなく文字数を望んでいるので、答えを広げると思いました。パウロに感謝します。

したがって、MySQLにはCHAR_LENGTH()があります。次の例では、LENGTH()CHAR_LENGTH()の違いを強調しています。

CREATE TABLE words (
    Word VARCHAR(100)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

INSERT INTO words(Word) VALUES('快樂'), ('happy'), ('hayır');

SELECT Word, LENGTH(Word) as num_bytes, CHAR_LENGTH(Word) AS num_characters FROM words;

+--------+-----------+----------------+
| Word   | num_bytes | num_characters |
+--------+-----------+----------------+
| 快樂    |         6 |              2 |
| happy  |         5 |              5 |
| hayır  |         6 |              5 |
+--------+-----------+----------------+

マルチバイト文字を扱う場合は注意してください。

103
93196.93

これが欲しいと思う:

select *
from dbo.table
where DATALENGTH(column_name) = 3
4
Irish Lass
SELECT *
   FROM   my_table
   WHERE  substr(my_field,1,5) = "abcde";
1
ennuikiller