So konvertieren Sie ein Zeichenfolgenfeld in ein Datumsfeld

9

Ich habe eine Ebene mit Punkten, die die tödlichen Verkehrsunfälle darstellen, und das Feld "Datumsangaben_14_D" enthält deren Datum, aber sein Typ ist Zeichenfolge. Ich möchte dieses Zeichenfolgenfeld in ein Datumsfeld konvertieren, aber die Schaltfläche OK ist inaktiv. Was ist das Problem? Ich benutze QGis. Schauen Sie sich das Bild unten anGeben Sie hier die Bildbeschreibung ein

ilias m
quelle
1
Was sagt es, wenn Sie auf "Weitere Informationen" klicken?
Matthias Kuhn
Ich denke, dass das Datumsformat falsch ist; QGIS erwartet so etwas wie "JJJJ-MM-TT".
ArMoraer
Analysefehler: Auswertungsfehler: Die Konvertierung "% 1" war nicht möglich.
Ilias m
Ich habe das Format konvertiert, wie @ArMoraer sagte, und ich habe den Vorgang wiederholt, aber die Schaltfläche OK ist wieder inaktiv.
Ilias m

Antworten:

12

Ich bin überrascht, dass ich das noch nie gesehen habe. Vielleicht übersehen ich etwas Offensichtliches :)

Obwohl Sie ein anderes Gebietsschema als ich verwenden, verwenden Sie dasselbe Datumsformat wie in Großbritannien, TT / MM / JJJJ. Ich erhalte einen etwas anderen Fehler (unter QGIS 2.16.1), aber das Datumsformat gefällt mir nicht.

Sie können dies umgehen, indem Sie ein kurzes Python-Skript auf der Registerkarte Funktionseditor des Ausdruckseditors erstellen.

  • Wechseln Sie im Ausdruckseditor zur Registerkarte Funktionseditor
  • Neue Funktion erstellen (Schaltfläche "Neue Datei")
  • Fügen Sie Folgendes in das Codefenster ein. Möglicherweise werden Einrückungsfehler angezeigt. Ziehen Sie daher bei Bedarf manuell erneut Leerzeichen ein
  • Klicken Sie auf "Laden", um die Änderungen zu speichern
  • Wechseln Sie zurück zur Registerkarte Ausdruck
  • Schauen Sie unter die Python-Überschrift, sollte jetzt eine Funktion namens parse_date_dmy sehen

from qgis.core import *
from qgis.gui import *
from PyQt4.QtCore import QDate

@qgsfunction(args="auto", group='Python')
def parse_date_dmy(fromval, feature, parent):
    return QDate.fromString(fromval, 'dd/MM/yyyy')

Sie können dann einen solchen Ausdruck mit Ihrem Feldnamen eingeben: -

parse_date_dmy("mydate") 

Wenn alles in Ordnung ist, sollten Sie so etwas sehen ...

Geben Sie hier die Bildbeschreibung ein

Steven Kay
quelle
Vielen Dank für Ihre ausführliche Antwort. Es funktionierte. Für einige Daten war das Ergebnis jedoch null. Gibt es eine Erklärung?
Ilias m
1
Versuchen Sie es mit TT / M / JJJJ als Formatzeichenfolge (siehe Spezifikation der Qt-Datumsformatzeichenfolge , beachten Sie jedoch, dass dies eine Qt5-Seite ist). Ich habe es an Tagen und Monaten mit ein- und zweistelligen Zahlen getestet und es schien in Ordnung zu sein. Wenn das funktioniert, werde ich meine Antwort aktualisieren.
Steven Kay
Wenn ich diese Prozedur zum ersten Mal ausführe, war das Format des Datums TT / M / JJJJ. Ich habe versucht, dies erneut mit dem Format TT / M / JJJJ auszuführen, und das Ergebnis einiger Datensätze war null, wie oben erwähnt. Außerdem führe ich dies mit dem Format TT / MM / JJJJ aus und das Ergebnis war, dass alle Datensätze null waren. Habe ich etwas falsch gemacht?
Ilias m
1

Oder verwenden Sie einfach:

to_date( regexp_substr( "MAJ" , '/(\\d+$)' ) || '-' || regexp_substr( "MAJ" , '/(\\d+)/' ) || '-' || regexp_substr( "MAJ" , '^(\\d+)/' ) )

Mit MAJ als Datumsfeld (TT / MM / JJJJ).

J. Sabatier
quelle
1

Ein Update für QGIS 3 der kristallklaren Antwort von @Steven Kay

Sie können dies umgehen, indem Sie ein kurzes Python-Skript auf der Registerkarte Funktionseditor des Ausdruckseditors erstellen.

  • Wechseln Sie im Ausdruckseditor zur Registerkarte Funktionseditor
  • Neue Funktion erstellen (Schaltfläche "Neue Datei")
  • Fügen Sie Folgendes in das Codefenster ein. Möglicherweise werden Einrückungsfehler angezeigt. Ziehen Sie daher bei Bedarf manuell erneut Leerzeichen ein
  • Klicken Sie auf "Laden", um die Änderungen zu speichern
  • Wechseln Sie zurück zur Registerkarte Ausdruck
  • Schauen Sie unter die Python-Überschrift, sollte jetzt eine Funktion namens parse_date_dmy sehen

from qgis.core import *
from qgis.gui import *
from PyQt5.QtCore import QDate

@qgsfunction(args="auto", group='Python')
def parse_date_dmy(fromval, feature, parent):
    return QDate.fromString(fromval, 'dd/MM/yyyy')

Sie können dann einen solchen Ausdruck mit Ihrem Feldnamen eingeben: -

parse_date_dmy("mydate") 

Wenn alles in Ordnung ist, sollten Sie so etwas sehen ...

Geben Sie hier die Bildbeschreibung ein

Roberto Zeeland
quelle