多数の単語を含むデータベースがありますが、文字の長さが特定の数に等しいレコードのみを選択したい(例3):
$query = ("SELECT * FROM $db WHERE conditions AND length = 3");
しかし、これは機能しません...誰かが正しいクエリを見せてもらえますか?
申し訳ありませんが、あなたが話している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 |
+--------+-----------+----------------+
マルチバイト文字を扱う場合は注意してください。
これが欲しいと思う:
select *
from dbo.table
where DATALENGTH(column_name) = 3
SELECT *
FROM my_table
WHERE substr(my_field,1,5) = "abcde";