문자열 필드를 날짜 필드로 변환하는 방법


10

치명적인 도로 사고를 나타내는 점이있는 레이어가 있으며 "dates_14_D"필드에 날짜가 포함되어 있지만 유형은 문자열입니다. 이 문자열 필드를 날짜 필드로 변환하고 싶지만 확인 버튼이 비활성화되어 있습니다. 뭐가 문제 야? QGis를 사용합니다. 아래 그림을 봐여기에 이미지 설명을 입력하십시오


1
"추가 정보"를 클릭하면 무엇을 말합니까?
Matthias Kuhn

날짜 형식이 잘못되었다고 생각합니다. QGIS는 'YYYY-MM-DD'와 같은 것을 기대합니다.
ArMoraer

구문 분석 오류 : 평가 오류 : "% 1"변환이 불가능합니다.
ilias m

@ArMoraer와 같은 형식으로 변환했는데 절차를 반복했지만 다시 확인 버튼이 비활성화되었습니다.
ilias m

답변:


14

나는 이것을 전에 보지 못한 것에 놀랐다. 어쩌면 나는 명백한 것을 간과하고 있습니다 :)

다른 로케일을 사용하고 있지만 영국에서 dd / MM / yyyy와 동일한 날짜 형식을 사용하고 있습니다. QGIS 2.16.1에서 약간 다른 오류가 발생하지만 해당 날짜 형식이 마음에 들지 않습니다.

표현식 편집기의 함수 편집기 탭에서 짧은 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')

QGIS 3. #을 사용하고 PyQt4에 대한 오류가 발생하면 대신 PyQt5를 사용하십시오. 즉 3 행을

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

그런 다음 필드 이름을 사용하여 식을 입력 할 수 있습니다.

parse_date_dmy("mydate") 

모든 것이 잘되면 다음과 같이 보일 것입니다 ...

여기에 이미지 설명을 입력하십시오


자세한 답변을 주셔서 감사합니다. 효과가있었습니다. 그러나 일부 날짜의 결과는 null이었습니다. 설명이 있습니까?
ilias m

1
d / M / yyyy 를 형식 문자열로 시도 하십시오 ( Qt 날짜 형식 문자열 spec 참조 ( 이것은 Qt5 페이지 임)). 나는 단일 숫자와 이중 숫자로 며칠과 몇 달에 테스트했으며 정상적으로 작동하는 것 같습니다. 그래도 작동하면 답변을 업데이트하겠습니다.
Steven Kay

이 절차를 처음 실행할 때 날짜 형식은 d / M / yyyy입니다. d / M / yyyy 형식으로 다시 실행하려고 시도했으며 위에서 언급 한대로 일부 레코드의 결과가 널입니다. 또한이 형식을 dd / MM / yyyy 형식으로 실행하면 모든 레코드가 null이되었습니다. 내가 잘못 했나요?
ilias m

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 스크립트를 작성하여이 문제를 해결할 수 있습니다.

  • 표현식 편집기에서 함수 편집기 탭으로 이동
  • 새로운 기능 만들기 ( "새 파일"버튼)
  • 코드 창에 다음을 붙여 넣습니다. 들여 쓰기 오류가 발생할 수 있으므로 필요한 경우 공백으로 수동으로 다시 들여 쓰기
  • "로드"버튼을 클릭하여 변경 사항을 저장하십시오
  • 표현식 탭으로 다시 전환
  • 파이썬 제목 아래를 보면 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의미하고 "달"을 의미하므로 대문자에주의하십시오 .

  • 이것은 누구나 사용해야하는 형식이 아닙니다. 해당 형식의 파일을 받으면 발신자에게 문의하십시오. 이것은 서 있지 않습니다!
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.