0

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

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

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

Dim AllocationDate() as Date If Not(IsNull({Command.Notes})) then Formula = DateValue ((ToNumber ({@Year})), (ToNumber ({@Month})), (ToNumber ({@Day} )))

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

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

tyvmia

4

2 回答 2

1

您可能要考虑使用正则表达式

Crystal Reports 没有对正则表达式的本机支持,因此您需要添加一个 UFL:Crystal Reports:有没有办法在 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')
)

虽然你可以

于 2012-08-01T11:50:01.417 回答
0

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

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

于 2012-08-07T22:53:52.430 回答