我正在尝试将文本格式的日期转换为日期格式,然后使用数字日期进行某些计算。
以下是我的查询的一部分:
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。
答案 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