文字列フィールドを日付フィールドに変換する方法


9

致命的な交通事故を表すポイントを持つレイヤーがあり、フィールド "dates_14_D"には日付が含まれていますが、そのタイプは文字列です。この文字列フィールドを日付フィールドに変換したいのですが、[OK]ボタンがアクティブではありません。どうしたの?QGisを使用しています。下の写真を見てくださいここに画像の説明を入力してください


1
「詳細」をクリックすると何が表示されますか?
Matthias Kuhn

日付の形式が間違っていると思います。QGISは「YYYY-MM-DD」のようなものを期待しています。
ArMoraer 2016

解析エラー:評価エラー:変換 "%1"はできませんでした。
イリアスm 2016

@ArMoraerが手順を繰り返したが、もう一度[OK]ボタンがアクティブではないと言ったように、フォーマットを変換しました。
イリアスm 2016

回答:


12

これまでに見たことがないことに驚いています。多分私は明白な何かを見落としている:)

私とは異なるロケールを使用していますが、英国で使用しているのと同じ日付形式dd / MM / yyyyを使用しています。(QGIS 2.16.1で)少し異なるエラーが発生しますが、その日付形式は好ましくありません。

これは、式エディターの関数エディタータブで短いpythonスクリプトを作成することで回避できます。

  • 式エディターの関数エディタータブに移動します
  • 新しい関数を作成(「新規ファイル」ボタン)
  • 以下をコードウィンドウに貼り付けます。インデントエラーが発生する可能性があるため、必要に応じて手動でスペースを使用してインデント
  • 「ロード」ボタンをクリックして変更を保存します
  • 式タブに戻る
  • pythonの見出しの下を見ると、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')

次に、フィールド名を使用して、次のような式を入力できます。

parse_date_dmy("mydate") 

すべてが順調であれば、このようなものが表示されるはずです...

ここに画像の説明を入力してください


詳細な回答をありがとうございました。出来た。しかし、一部の日付では、結果はnullでした。説明はありますか?
ilias m 2016

1
フォーマット文字列としてd / M / yyyyを試してください(これはQt5ページであることに注意してくださいが、Qt日付フォーマット文字列仕様を参照してください)。私はそれを1桁と2桁の数値で数か月にテストしましたが、問題なく動作したようです。それが機能する場合、私は私の答えを更新します。
Steven Kay

この手順を初めて実行したとき、日付の形式はd / M / yyyyでした。これをd / M / yyyyの形式でもう一度実行しようとしたところ、前述のように一部のレコードの結果がnullでした。さらに、これをdd / MM / yyyyという形式で実行したところ、すべてのレコードがnullでした。間違ったことをしたことがありますか?
ilias m 2016

1

または単に使用する:

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

日付フィールドとしてMAJを使用(dd / MM / YYYY)。


1

@Steven Kayによる明確な答えのQGIS 3の更新

これは、式エディターの関数エディタータブで短いpythonスクリプトを作成することで回避できます。

  • 式エディターの関数エディタータブに移動します
  • 新しい関数を作成(「新規ファイル」ボタン)
  • 以下をコードウィンドウに貼り付けます。インデントエラーが発生する可能性があるため、必要に応じて手動でスペースを使用してインデント
  • 「ロード」ボタンをクリックして変更を保存します
  • 式タブに戻る
  • pythonの見出しの下を見ると、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") 

すべてが順調であれば、このようなものが表示されるはずです...

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.