Frage von adamax08, 15

MySQL Zuweisung von unterschiedlich langen Einträgen mit Hilfe von % - kann mir jemand helfen?

Ich hoffe jemand kann mir hier weiterhelfen:

Ich habe 2 große Listen: Eine Liste beinhaltet eine Spalte mit 10-11 stelligen Zahlen und zu jeder zahl ist in der 2. Spalte ein Eintrag zugeordnet.

Die 2. Liste beinhaltet eine Kurzfassung der Zahlen wie in der 1. Liste. Aber anstatt 10-11 stellig, sind die zahlen 3,4,5,6,7 oder 8 stellig; also unterschiedlich.

Mein problem ist: Bsp: Aus Liste 1: Nummer 123456789. Zugewiesen ist das Wort "Waffeln". Aus Liste 2 ist die Kurzfassung 123 zu finden.

Die Abfrage soll aussehen: If 123 = 123456789 true, then "Waffeln".

Aber in MySQL geht das nicht da 123 nicht wirklich gleich 123456789 ist, obwohl es eigentlich richtig ist.

Man müsste da mit "%" arbeiten aber ich weiß nicht wie ich das einbauen soll.

WHEN CONCAT(liste1.numLang,'%') = liste2.numKurz ??

Gruß

Antwort
von Tschoo, 15

Na ja, 123 gleich 123456789 -- da könnte man wohl lange diskutieren.

MySql kennt "Wildcards", wie du richtig erkannt hast, steht dafür das Zeichen '%', und es wird so verwendet, wie der '*' in einigen <Betreibssystemen.

 final String SELECT_WORDS =  "SELECT " + WORD_WOERTER  + " FROM " + TAB_DUMMYWORD + langCode + 
" WHERE " + WORD_KATEGORIE + " = " + kategorie + " AND " + WORD_WOERTER +
" BETWEEN '" + from + "%' AND '" + til + "%' ORDER BY " + WORD_WOERTER;

Das oben ist eine Abfrage von mir, aus einem Programm, ich suche Datensätze die zwischen (z.B.) "D" und "K" liegen, also "Dada", "Diabetes" ... bis "Karlsruhe", "Kryptographie" ...  Der relvante Teil (für dich) kommt als nach dem BETWEEN, from wäre "D", til wäre "K" (in meinem Beispiel).

für dich: WHERE liste1.numLANG = liste2.numKurz% -- das Prozentzeichen also direct an die kurze Nummer.

Wie das syntaktisch bei dir aussieht, aussehen muß kann ich natürlich nicht sagen -- ich weis nicht ob du "direkt", über  eine Konsole mit der DB kommunizierst oder es in einem Cursor aus einem Programm machst.

doch nochmal eine Erläuterung, das BETWEEN in meinem Beispiel wäre:

BETWEEN 'D%' AND 'K%'
bei dir
liste1.numLang = liste2.numKurz + '%'

Gruß

Antwort
von RakonDark, 9

du kannst auch mit der länge vergleichen

substr (a,1,length(a) ) = substr(b,1,length(a) )

oder

left(a,length(a)) = left(b,length(a))

Keine passende Antwort gefunden?

Fragen Sie die Community