0

Jahreszahl als Text nach Jahren sortieren ?

Aus einer sehr umfangreichen Dokumentensammlung habe ich Jahreszahlen in eine Ninox-Datenbank (Textfeld) übernommen. Mein Problem: Die Jahreszahlen lassen sich so nicht sinnvoll (auf- oder absteigend) sortieren.
Gespeichert sind einige zig-tausend Datensätze in der abgebildeten Form (Einzelner Jahrgang, oder Jahrgang "von bis" durch Bindestrich getrennt).
Wie kann ich möglichst effektiv die Daten in diesem Feld so umwandeln, dass sie bei gleichem Inhalt sortierbar werden?

2 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi,

    Da Ninox nur nach sichtbaren Feldern sortieren kann musst du eine Zusatzspalte oder ein Funktionsfeld hizufügen und danach sortieren.

    Als Formel kann ich dir folgendes anbieten:

    ---

    let my := this;
    let myT := (select 'DEINE TABELLE');
    let myAR := split(Jahr, "-");
    cnt(myT[number(first(split(Jahr, "-")) < number(first(myAR)))]) + 1 + if number(first(split(Jahr, "-")) = number(first(myAR))) then
    cnt(myT[number(first(split(Jahr, "-")) = number(first(myAR))) and number(last(split(Jahr, "-")) < number(last(myAR)))]) + 1
    else
    0
    end + if Jahr = my.Jahr then
    cnt(myT[Jahr = my.Jahr and number(_id) < number(my._id)]) + 1
    else
    0
    end - 2

    ---

    Es kann sein, dass es bei mehreren tausend Datensätze zu performance-problemen kommt. in diesem Fall würde ich das Sortierungsfeld als Zahlenfeld hinzufügen und die Formel als Trigger nach Änderung bei Jahr:

    ---

    for i in select 'DEINE TABELLE' do
    let myT := (select 'DEINE TABELLE');
    let myAR := split(i.Jahr, "-");
    i.(SORTIERUNGSFELD := cnt(myT[number(first(split(Jahr, "-")) < number(first(myAR)))]) + 1 + if number(first(split(Jahr, "-")) = number(first(myAR))) then
    cnt(myT[number(first(split(Jahr, "-")) = number(first(myAR))) and number(last(split(Jahr, "-")) < number(last(myAR)))]) + 1
    else
    0
    end + if Jahr = i.Jahr then
    cnt(myT[Jahr = i.Jahr and number(_id) < number(i._id)]) + 1
    else
    0
    end - 2)
    end

    ---

    Leo

    • Holzi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Leo, Du bist der Größte ....
    Genauso funktioniert es, darauf wäre ich nie gekommen.
    Mit der Version 1 läuft es es problemlos = keine performance-Probleme.
    Vielen Dank.

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 2Antworten
  • 1184Ansichten