Frage

So,

SELECT * FROM table WHERE col LIKE '%'

wird alles zurückgeben. Gibt es eine Wildcard für die Abfrage?

SELECT * FROM table WHERE col = '*'

Deutlich * Funktioniert nicht, ich habe es nur dort gegeben, um anzuzeigen, wo ich eine Wildcard möchte. Die Spalte, aus der ich auswähle, enthält eine Ganzzahl zwischen 1 und 12, und ich möchte in der Lage sein, entweder alle Datensätze mit einer bestimmten Zahl oder alle Datensätze mit einer Wildcard auszuwählen.

Vielen Dank,

War es hilfreich?

Lösung

Wie ist im Grunde genommen das gleiche wie =, außer wie können Sie Wildcards verwenden.

Diese beiden Abfragen geben dieselben Ergebnisse zurück:

SELECT * FROM table WHERE col LIKE 'xyz';
SELECT * FROM table WHERE col='xyz';

Ohne '%' in der ähnlichen Abfrage ist es effektiv das gleiche wie "=".

Wenn Sie eine Auswahl in einer Ganzzahlspalte durchführen, sollten Sie in Betracht ziehen, die in () oder zwischen Operatoren zu verwenden. Es hört sich so an, als hätten Sie jedoch zwei getrennte Bedingungen, die in Ihrem Code und nicht in der Abfrage behandelt werden sollten, da Ihre Bedingungen vorschreiben, dass Sie mindestens zwei verschiedene Arten von Abfragen benötigen.

Bearbeiten: Ich sollte klarstellen, dass wie und = nur in normaler Vergleichsnutzung von Humdrum String ähnlich sind. Sie sollten die überprüfen Mysql Handbuch Für Einzelheiten darüber, wie es funktioniert, da es Situationen gibt, in denen es nicht gleich ist (wie z. B. Sprachsätze).

Andere Tipps

Wenn Sie alles auswählen möchten, warum befestigen Sie dann überhaupt die Where -Klausel? Lassen Sie es einfach bedingt aus, anstatt eine Wildcard hineinzugeben.

Der Grund für die Verwendung von Like ist, dass das = keine Wildcard -Unterstützung bietet. Andernfalls würde es keinen Grund geben

SELECT * FROM table WHERE col RLIKE '.*'

dh reguläre Expression wie.

Zombats Antwort ist großartig, aber ich habe nur in seiner Antwort bemerkt, dass Sie Ganzzahlen auswählen. Er erwähnte in () und zwischen (). Hier finden Sie Beispiele, die diese Syntaxen verwenden, sowie einige andere Optionen, die Sie für ein ganzzahliges Feld haben.

SELECT * FROM table WHERE col = 1;
SELECT * FROM table WHERE col BETWEEN 1 AND 12;
SELECT * FROM table WHERE col BETWEEN 6 AND 12;
SELECT * FROM table WHERE col <= 6;
SELECT * FROM table WHERE col < 6;
SELECT * FROM table WHERE col >= 6;
SELECT * FROM table WHERE col > 6;
SELECT * FROM table WHERE col <> 6;
SELECT * FROM table WHERE col IN (1,2,5,6,10);
SELECT * FROM table WHERE col NOT IN (1,2,5,6,10);

Vorausgesetzt, Ihre Abfrage ist Parameter gesteuert, ist wahrscheinlich eine Fallanweisung angemessen

select * from mytable
where col like case when @myvariable is null then % else myvariable end

Wo @myvariable ist entweder null, wenn Sie keinen Wert wünschen, sonst würde er den Ganzzahlwert verwenden, den Sie eingeben.

Ich bin auf einen solchen Fall gestoßen, als ich ein gespeichertes Verfahren für einen Bericht erstellt habe. Ich hoffe, dies war das, was Sie gedacht haben :)

set @p = "ALL";

Anfrage:

select * from fact_orders
where
dim_country_id = if(@p is null or @p="ALL", dim_country_id, @p)
limit 10
;

Wenn Ihre Werte im Bereich (1,12) liegen, dann:

Wählen Sie * aus der Tabelle aus, wobei col> = 5 und col <= 5; // Dies ist gleich col = 5

Wählen Sie * aus der Tabelle aus, wobei col> = 0 und col <= 12; // Dies entspricht Col = jedem Wert

Die gleiche Linie kann beide Effekte erzeugen, indem die 2 Parameter entsprechend ausgewählt werden. Ich hatte ein ähnliches Problem, als ich eine einzelne vorbereitete Anweisung brauchte, die mit zwei verschiedenen Arten funktionieren sollte, entweder nach einem bestimmten Wert in einer Spalte oder ignorierte diese Spalte vollständig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top