स्ट्रिंग फ़ील्ड को दिनांक फ़ील्ड में कैसे परिवर्तित करें


10

मेरे पास बिंदुओं के साथ एक परत है जो घातक सड़क दुर्घटनाओं का प्रतिनिधित्व करती है और फ़ील्ड "तारीख_14_ डी" में उनकी तारीख शामिल है लेकिन इसका प्रकार स्ट्रिंग है। मैं इस स्ट्रिंग फ़ील्ड को दिनांक फ़ील्ड में परिवर्तित करना चाहूंगा लेकिन ओके बटन निष्क्रिय है। समस्या क्या है? मैं QGis का उपयोग करता हूं। नीचे दी गई तस्वीर देखेंयहां छवि विवरण दर्ज करें


1
जब आप "अधिक जानकारी" पर क्लिक करते हैं तो यह क्या कहता है?
मथियास कुहन

मुझे लगता है कि तारीख का प्रारूप गलत है; QGIS को 'YYYY-MM-DD' से कुछ उम्मीद है।
अरोमोर

पार्स त्रुटि: त्रुटि त्रुटि: रूपांतरण "% 1" संभव नहीं था।
इलियास m

मैंने @ArMoraer जैसे प्रारूप को परिवर्तित किया, मैंने कहा कि मैंने प्रक्रिया दोहराई लेकिन फिर से ओके बटन निष्क्रिय है।
इलियास m

जवाबों:


14

मुझे आश्चर्य है कि मैंने इसे पहले नहीं देखा है। शायद मैं कुछ स्पष्ट देख रहा हूँ :)

हालाँकि आप मेरे लिए एक अलग स्थान का उपयोग कर रहे हैं, आप उसी दिनांक प्रारूप का उपयोग कर रहे हैं जैसा कि मैं यूके, dd / MM / yyyy में करता हूं। मुझे थोड़ी अलग त्रुटि मिलती है (QGIS 2.16.1 पर) लेकिन यह उस तारीख के प्रारूप को पसंद नहीं करता है।

आप अभिव्यक्ति संपादक के फ़ंक्शन संपादक टैब में एक छोटी अजगर स्क्रिप्ट बनाकर इसे प्राप्त कर सकते हैं।

  • अभिव्यक्ति संपादक में फ़ंक्शन संपादक टैब में जाएं
  • एक नया फ़ंक्शन ("नई फ़ाइल" बटन) बनाएं
  • कोड विंडो में निम्नलिखित पेस्ट करें। आपको इंडेंटेशन त्रुटियां हो सकती हैं, इसलिए यदि आवश्यक हो तो मैन्युअल रूप से रिक्त स्थान के साथ इंडेंट करें
  • परिवर्तनों को सहेजने के लिए "लोड" बटन पर क्लिक करें
  • एक्सप्रेशन टैब पर वापस जाएँ
  • अजगर शीर्षक के तहत देखो, अब parse_date_dmy नामक एक समारोह देखना चाहिए

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')

यदि आप QGIS 3. # का उपयोग करते हैं और PyQt4 के बारे में एक त्रुटि प्राप्त करते हैं, तो इसके बजाय PyQt5 का उपयोग करें, अर्थात पंक्ति 3 को इसके साथ बदलें

...
from PyQt5.QtCore import QDate
...

तब आप अपने फ़ील्ड नाम का उपयोग करते हुए, जैसे कोई अभिव्यक्ति दर्ज कर सकते हैं: -

parse_date_dmy("mydate") 

यदि सब ठीक है, तो आपको कुछ इस तरह से देखना चाहिए ...

यहां छवि विवरण दर्ज करें


आपके विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। इसने काम कर दिया। लेकिन, कुछ तारीखों के लिए, परिणाम शून्य था। क्या कोई स्पष्टीकरण है?
इलियास m

1
अपने प्रारूप स्ट्रिंग के रूप में d / M / yyyy आज़माएं ( Qt दिनांक स्वरूप स्ट्रिंग युक्ति देखें , हालांकि ध्यान दें कि यह एक Qt2x है)। मैंने इसे एकल और दोहरे आंकड़ों के साथ दिनों और महीनों पर परीक्षण किया और यह ठीक काम करने लगा। अगर वह काम करता है तो मैं अपना जवाब अपडेट करूंगा।
स्टीवन केए

पहली बार जब मैंने इस प्रक्रिया को चलाया, तो दिनांक का प्रारूप d / M / yyyy था। मैंने इसे प्रारूप d / M / yyyy के साथ फिर से चलाने की कोशिश की है और कुछ अभिलेखों का परिणाम शून्य था जैसा कि ऊपर बताया गया है। इसके अलावा, मैं इसे प्रारूप dd / MM / yyyy के साथ चलाता हूं और परिणाम यह था कि सभी रिकॉर्ड शून्य थे। क्या मैंने sth गलत किया है?
इलियास एम

1

या बस का उपयोग करें:

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

MAJ के साथ आपकी तिथि क्षेत्र के रूप में (dd / MM / YYYY)।


1

@Steven Kay द्वारा क्रिस्टल स्पष्ट उत्तर के QGIS 3 के लिए एक अद्यतन

आप अभिव्यक्ति संपादक के फ़ंक्शन संपादक टैब में एक छोटी अजगर स्क्रिप्ट बनाकर इसे प्राप्त कर सकते हैं।

  • अभिव्यक्ति संपादक में फ़ंक्शन संपादक टैब में जाएं
  • एक नया फ़ंक्शन ("नई फ़ाइल" बटन) बनाएं
  • कोड विंडो में निम्नलिखित पेस्ट करें। आपको इंडेंटेशन त्रुटियां हो सकती हैं, इसलिए यदि आवश्यक हो तो मैन्युअल रूप से रिक्त स्थान के साथ इंडेंट करें
  • परिवर्तनों को सहेजने के लिए "लोड" बटन पर क्लिक करें
  • एक्सप्रेशन टैब पर वापस जाएँ
  • अजगर शीर्षक के तहत देखो, अब parse_date_dmy नामक एक समारोह देखना चाहिए

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')

तब आप अपने फ़ील्ड नाम का उपयोग करते हुए, जैसे कोई अभिव्यक्ति दर्ज कर सकते हैं: -

parse_date_dmy("mydate") 

यदि सब ठीक है, तो आपको कुछ इस तरह से देखना चाहिए ...

यहां छवि विवरण दर्ज करें


1

मैं नहीं जानता कि यह 2016 में वापस क्या था, लेकिन QGIS 3.10 के रूप में, यह अभिव्यक्ति संपादक या फ़ील्ड कैलकुलेटर में QGIS में उपलब्ध कार्यों में लागू किया गया है। दाईं ओर प्रलेखन (फ़ील्ड कैल्क संवाद में) आपको इसका समाधान देता है:

to_date( "MyDateFieldNameWithDatesAsStrings" , 'dd/MM/yyyy' )

(व्हाट्सएप वैकल्पिक हैं) और "ओके" मारा। अपनी विशेषता तालिका में मौजूद "प्रारूप" को अनुकूलित करें। उदाहरण के लिए, यदि आपकी तारीखें कुछ ऐसी दिखती हैं 07.3.03, तो उसके लिए सही प्रारूप dd.M.yy* होगा । पूंजीकरण पर ध्यान दें, क्योंकि प्रतीक m"मिनट" Mके लिए खड़ा है और "महीनों" के लिए खड़ा है।

  • यह कोई प्रारूप नहीं है जिसका किसी को भी उपयोग करना चाहिए। यदि आपको उस प्रारूप वाली फ़ाइल मिलती है, तो कृपया प्रेषक के श्रेष्ठ से बात करें। यह खड़ा नहीं होगा!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.