Ergebnis 1 bis 7 von 7

Thema: Per SQL-Abfrage enthaltene BITWERTE in einer INTEGER-Zahl ermitteln

  1. #1
    TP-Senior
    Registriert seit
    Dec 2001
    Beiträge
    154

    Question Per SQL-Abfrage enthaltene BITWERTE in einer INTEGER-Zahl ermitteln

    Hallo,

    wie kann ich aus einem INTEGER-Wert mit einer SQL-Abfrage in MySQl ermittel, welche BITZAHLEN (1,2,4,8,16,32, ...) dort enthalten sind,
    z.B. ermitteln, dass in der Zahl 15 die Bitzahlen 1,2,4 und 8 enthalten sind oder in der Zahl 10 nur die Bitwerte 2 und 8.

    ungefähr so:

    SELECT BitwerteIn(Variable) FROM table WHERE ID=x

    Herzlichen Dank für Eure Antworten!

    Grüße Marcel

  2. #2
    TP-Senior
    Registriert seit
    Nov 2002
    Beiträge
    289
    Ich vermute jetzt mal ins Blaue, dass das MySQL so ohne weiteres nicht kann. Das ist auch evtl etwas viel was Du da verlangst - die Umrechnung musst Du wahrscheinlich schon selbst berechnen.
    ...zur Zeit außer Betrieb...

  3. #3
    TP-Senior
    Registriert seit
    Dec 2001
    Beiträge
    154
    Wie hat den die Umrechung zu erfolgen. Gibt es da eine Formel für?

  4. #4
    TP-Senior
    Registriert seit
    Nov 2002
    Beiträge
    289
    Ist nicht sonderlich schwer:

    1. Teile deine Zahl durch 2
    2. Merke dir das ganzzahlige Ergebnis
    3. Merke dir den Rest (immer 1 oder 0)
    4. Teile das ganzzahlige Ergebnis wieder durch 2
    5. Wiederhole die Schritte 1-3 bis das Ergebnis der Division 0 ist
    6. Die Binärzahl ergibt sich aus den gemerkten Resten von hinten nach vorne abgelesen


    Das ganze lässt sich recht intuitiv in Code umsetzen - vielleicht gibt es aber auch noch eine etwas effizientere Variante. Da müsstest Du mal selbst
    suchen.
    ...zur Zeit außer Betrieb...

  5. #5
    TP-Veteran Avatar von Guin
    Registriert seit
    Nov 2006
    Ort
    Nordholz
    Beiträge
    1.684
    warum so kompliziert
    There is an app ... ähm a function for that.
    http://www.php.net/manual/de/function.decbin.php

    Wer's allgemeiner mag, nimmt base_convert.
    Gruss Guin
    Mein Blog

  6. #6
    TP-Senior
    Registriert seit
    Nov 2002
    Beiträge
    289
    Ahh, hätt ich mir auch denken können, dass es da eine bzw mehrere Funktionen in PHP für gibt. Aber so weiß er wenigstens, wie es geht, wenn er nur Papier und Bleistift hat. BTW funktioniert meine Methode auch mit Zahlen die größer sind als 4294967295 - es dauert dann nur etwas ;-)
    ...zur Zeit außer Betrieb...

  7. #7
    TP-Veteran Avatar von Guin
    Registriert seit
    Nov 2006
    Ort
    Nordholz
    Beiträge
    1.684
    4294967295 besteht aus 32 Einsen. Das ist schon ne Menge. Ansonsten gibt es auch eine Funktion in den Kommentaren, die deine Vorgehensweise nachbaut.

    Die Funktion bindecValues (http://php.net/decbin) aus den Kommentaren ist auch interessant. Das entspricht eigentlich dem was der TO wollte. Den Wert der jeweiligen Eins.
    Gruss Guin
    Mein Blog

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [MySQL] Mysql Abfrage Jubilare ermitteln
    Von MichaelM im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 12.02.2010, 12:10
  2. [MySQL] Abfrage mit Werten aus einer Abfrage
    Von Andy89 im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 11.01.2010, 14:44
  3. Den Rest einer Zahl herausfinden (ohne Modulo)
    Von Adromir im Forum Traum-Dynamik
    Antworten: 10
    Letzter Beitrag: 29.06.2007, 09:16
  4. Werte aus einer Tabelle ermitteln
    Von MichaelM im Forum Traum-Dynamik
    Antworten: 38
    Letzter Beitrag: 14.03.2007, 14:00
  5. Höchste Zahl ermitteln
    Von Master_T2 im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 24.05.2003, 23:46

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51