2016-03-22 85 views
0

我試圖將文本格式的日期轉換爲日期格式,然後使用數字日期進行一些計算。如果參數不是整數,Access DateSerial函數返回什麼

這裏是我的查詢的一部分:

DateSerial(right(a.exit_date,4), left(a.exit_date,2), mid(a.exit_date,4,2)) as exit_date_num, 
IIF(not(exit_date_num is NULL), date1,date2) as hire_date 

時exit_date包含了諸如「2012年11月26日」的一些值此代碼的工作。但是有時候exit_date缺失(需要空間值,即「」)。在這種情況下,我的IIF條件(上面的第二行代碼)不起作用。但是,如果我改變第一線以下,它的工作原理

IIF(exit_date<> " ",DateSerial(right(a.exit_date,4), left(a.exit_date,2), mid(a.exit_date,4,2))) as exit_date_num, 
IIF(not(exit_date_num is NULL), date1,date2) as hire_date 

時DateSerial遇到無效的參數它返回的東西是不爲空因此很明顯。我想知道它是什麼。 最終目的是創建一個通用代碼,可以成功創建hire_date,而不管exit_date是否爲空/一個空格/兩個空格。

+0

我已經改變了代碼單行查詢得到了通用的解決方案:IIF(則IsDate(exit_date) ,date1,date2)作爲hire_date。不過,我仍然想知道當函數的參數無效時會發生什麼。 –

回答

1

DateSerial總是返回一個日期,因此您的exit_date_num is NULL永遠不會成立。

雖然不是很清楚,你試圖做什麼,我會用則IsDate

IIf(IsDate(a.exit_date), date1, date2) As hire_date 
+0

感謝@Gustav,那麼如何確定哪些記錄查詢已返回缺少的日期。 –

+0

@SergeyS。告訴你如何。 – Gustav

2

DateSerial接受整數變量作爲參數。當您使用像right(a.exit_date,4)這樣的參數表達式時,Access會將此表達式計算爲字符串,然後嘗試將字符串轉換爲整數。一旦空字符串不能轉換爲整數,函數就會生成錯誤13(類型不匹配),並且查詢失敗

+0

謝謝@sergey,那麼我們如何確定哪些記錄查詢產生了錯誤13. –

+2

只要修改你的查詢,在條件'IsDate(a.exit_date)= false'處添加。查詢將顯示所有無效記錄。 –

相關問題