【问题标题】:crystal reports - how to extract a date from string水晶报告 - 如何从字符串中提取日期
【发布时间】:2012-08-01 11:29:42
【问题描述】:

使用 Crystal Reports 2008,我需要从文本字段中提取日期。该日期的格式通常为 dd/mm/yy,但也可以输入为 d/m/yy、dd/m/yyyy 等。

此日期可以出现在字符串中的任何位置。

目前我依赖于日期放在字符串末尾的事实,没有后面的句号,并使用 LEFT/RIGHT 来提取每个日期部分。然后将这些部分传递给另一个公式以创建完整日期:

将 AllocationDate() 调暗为日期 If Not(IsNull({Command.Notes})) 那么 公式 = DateValue ((ToNumber ({@Year})), (ToNumber ({@Month})), (ToNumber ({@Day})))

但是,如果有人使用不同的格式,请在整个报告结束的日期之后添加句号或更多注释。

有没有什么方法可以通过寻找模式来提取这个日期?我猜我可以使用 TRIM 来解决格式上的不一致问题。

特维米亚

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    您可能需要考虑使用regular expression

    Crystal Reports 不支持正则表达式,因此您需要添加 UFL:crystal reports : is there a way to regex in crystal reports?

    您应该能够根据自己的需要调整此问题中的模式:Javascript date regex DD/MM/YYYY

    最后,您可以使用regexpal.com 测试文本上的模式。

    ** 编辑 **

    创建 SQL 表达式字段(Oracle 10 语法)以提取日期字符串并将其转换为日期字段:

    // {%Allocation Date}
    (
      -- match date-like string, then convert to date type; is no dates are found, NULL is returned
      TO_DATE( REGEXP_SUBSTR( TABLE.FIELD, '\d{1,2}\/\d{1,2}\/\d{2,4}',1 ,1), 'dd/mm/yyyy')
    )
    

    虽然可以

    【讨论】:

    • 如果您使用SQL数据库,例如SQL Server,请查看是否有正则表达式并在那里执行正则表达式数据提取并从列中的db中返回日期值
    • 好点,+1。使用 SQL 表达式字段可以轻松引用数据库的正则表达式引擎。
    【解决方案2】:

    并且,作为最后的手段,您可以尝试通过替换代表 CR、LF 等的特殊字符将多行字符串转换为长字符串。用空格或其他无害字符替换它们,然后处理结果字符串,就好像它只是一个常规字符串(日期在中间)。

    您仍然需要做出一些假设才能使这成为可能:每个字符串一个日期,所有特殊字符都是已知的(或者您必须测试所有可能的特殊字符),日期与格式有一定的一致性,等等。

    【讨论】:

    • 谢谢,我试试看:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    相关资源
    最近更新 更多