2012-08-01 12 views
0

日期使用Crystal Reports 2008年,我需要提取文本字段的日期。此日期通常爲格式dd/mm/yy,但也可以輸入爲d/m/yy,dd/m/yyyy等。水晶報表 - 如何提取字符串

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

在我依靠以下事實的日期被放置在字符串的末尾,如果沒有下面的句號,並使用左/右,以提取每個日期部分的那一刻。然後,這些部件被傳遞到另一式創建完整日期:

昏暗AllocationDate()作爲日期 否則(ISNULL({Command.Notes}))然後 式= DateValue將((ToNumber({@Year} )),(ToNumber({@Month})),(ToNumber({@Day})))

但是,如果有人使用格式的變體,在整個報告龍骨日期之後添加完整的或更多的註釋過度。

有什麼辦法,我可以提取此日期通過尋找一種模式?我猜測我可以使用TRIM來解決格式上的不一致問題。

tyvmia

回答

0

而且,作爲最後的手段,您可以嘗試通過更換代表CR,LF等,用空格或其他無害的字符替換他們的特殊字符的多行字符串轉換成一個長字符串,然後把得到的字符串,好像它只是一個普通的字符串(日期在中間)。

您仍然需要做出一些假設才能做到這一點:每個字符串一個日期,所有特殊字符都已知(或者您必須測試所有可能的特殊字符),日期與格式等符合。

+0

謝謝,我會給它一個:) – Sharon 2012-08-09 07:51:26

1

你可能要考慮使用regular expression

水晶報表沒有對正則表達式的原生支持,所以你需要添加一個UFL:crystal reports : is there a way to regex in crystal reports?

您應該能夠適應在這個問題上的圖案爲你的需求:Javascript date regex DD/MM/YYYY

最後,您可以使用regexpal.com在文字上測試圖案。

**編輯**

創建一個SQL表達式場(甲骨文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') 
) 

雖然你可以

+1

如果使用例如SQL Server中的SQL數據庫,看看是否有正則表達式和那裏執行正則表達式提取數據,並從數據庫中列 – 2012-08-01 19:50:34

+1

優秀點返回日期值+1。可以使用SQL表達式字段輕鬆地引用數據庫的正則表達式引擎。 – craig 2012-08-01 21:27:04