Abfragen WO Bedingung zur Zeichenlänge?


77

Ich habe eine Datenbank mit einer großen Anzahl von Wörtern, aber ich möchte nur die Datensätze auswählen, bei denen die Zeichenlänge einer bestimmten Anzahl entspricht (in Beispielfall 3):

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

Aber das funktioniert nicht ... kann mir jemand die richtige Abfrage zeigen?

Antworten:


130

Entschuldigung, ich war mir nicht sicher, über welche SQL-Plattform Sie sprechen:

In MySQL:

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

in MSSQL

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

Die Funktion LENGTH () (MySQL) oder LEN () (MSSQL) gibt die Länge einer Zeichenfolge in einer Spalte zurück, die Sie als Bedingung in Ihrer WHERE-Klausel verwenden können.

Bearbeiten

Ich weiß, dass dies wirklich alt ist, dachte aber, ich würde meine Antwort erweitern, weil Sie, wie Paulo Bueno zu Recht betonte, höchstwahrscheinlich die Anzahl der Zeichen im Gegensatz zur Anzahl der Bytes wollen. Danke Paulo.

Für MySQL gibt es also die CHAR_LENGTH(). Das folgende Beispiel verdeutlicht den Unterschied zwischen LENGTH()ein 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 |
+--------+-----------+----------------+

Seien Sie vorsichtig, wenn Sie mit Multi-Byte-Zeichen arbeiten.


1
Die MySQL-Syntax entspricht der SQLite-Syntax. Hat super für mich funktioniert.
Jon

4
In Postgres können Sie die Funktion "Länge" wie in MySQL verwenden
alexey_efimov

3
In acht nehmen! In Multi-Byte-Zeichensätzen kann dies unterschiedlich sein. Sehen Sie dies
Paulo Bueno

7

Ich denke du willst das:

select *
from dbo.table
where DATALENGTH(column_name) = 3

DATALENGHT berücksichtigt die zusätzlichen Bytes, die von Unicode-Zeichen verwendet werden
Marcel

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.