如果参数不是整数,那么Access DateSerial函数会返回什么

时间:2016-03-22 10:17:20

标签: sql ms-access null

我正在尝试将文本格式的日期转换为日期格式,然后使用数字日期进行某些计算。

以下是我的查询的一部分:

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包含一些像“11/26/2012”这样的值时,此代码有效。但是有时候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遇到无效参数时,它返回的内容不为null。我想知道它是什么。 最终目的是创建一个通用代码,无论exit_date是空白还是一个空格/两个空格,都可以成功创建hire_date。

2 个答案:

答案 0 :(得分:2)

DateSerial接受整数变量作为参数。当您使用像right(a.exit_date,4)这样的参数表达式时,Access会将此表达式计算为字符串,然后尝试将字符串转换为整数。只要空字符串无法转换为整数,函数就会生成错误13(类型不匹配)并且查询失败

答案 1 :(得分:1)

DateSerial总是返回一个日期,因此exit_date_num is NULL将永远不会成立。

虽然不太清楚你想要做什么,但我会使用 IsDate

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