如何将字符串字段转换为日期字段


9

我的图层代表了致命的道路交通事故,“ dates_14_D”字段包含其日期,但其类型为字符串。我想将此字符串字段转换为日期字段,但“确定”按钮处于非活动状态。有什么问题?我使用QGis。看下图在此处输入图片说明


1
当您单击“更多信息”时,它表示什么?
马提亚斯·库恩

我认为日期格式不正确;QGIS期望使用类似“ YYYY-MM-DD”的格式。
ArMoraer

解析错误:评估错误:无法进行转换“%1”。
ilias m

我转换了格式,就像@ArMoraer所说的那样,我重复了该过程,但是OK按钮再次处于无效状态。
ilias m

Answers:


13

我很惊讶从未见过。也许我正在忽略一些明显的问题:)

尽管您使用的语言环境与我不同,但您使用的日期格式与我在英国使用的相同,即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") 

如果一切顺利,您应该会看到类似这样的信息...

在此处输入图片说明


非常感谢您的详细回答。有效。但是,对于某些日期,结果为空。有什么解释吗?
ilias m

1
尝试使用d / M / yyyy作为格式字符串(请参阅Qt日期格式字符串规范,尽管请注意,这是Qt5页面)。我在几天和几个月里用一个或两个数字对其进行了测试,它似乎工作正常。如果可行,我将更新我的答案。
史蒂文·凯

我第一次运行此过程时,日期的格式为d / M / yyyy。我尝试再次以d / M / yyyy格式运行此文件,并且如上所述,某些记录的结果为空。另外,我使用dd / MM / yyyy格式运行此命令,结果是所有记录均为空。我做错了吗?
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脚本来解决此问题。

  • 进入表达式编辑器中的“函数编辑器”选项卡
  • 创建一个新功能(“新文件”按钮)
  • 将以下内容粘贴到代码窗口中。您可能会出现缩进错误,因此如果需要,请使用空格手动重新缩进
  • 点击“加载”按钮保存更改
  • 切换回表情标签
  • 在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") 

如果一切顺利,您应该会看到类似这样的信息...

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.