The short answer, with a high degree of confidence, would be yes. However, I still don't know where the decade reference is coming from. It seems you have a table for that after all, which was part of my confusion since in one post you seemed to say you have it, and in another, you don't want it. So without a clearer understanding of this relationship, I wouldn't attempt it myself since I don't understand how you get 1968 from 118062907. Based on the limited samples you've shown, and having not shown this decade table, you can't expect me to know why this isn't 1958 or 1978 or whatever.
I don't like looonggg expressions with multiple nested IIF's. I prefer procedures for such complicated decisions. So from what I can glean from the discussion, the solution would involve the use of Len, Left and probably Mid functions, and maybe CDate if you want the result to be of the date data type. Using your field references, maybe something like this
Code:
Select Case Len(serial)
Case Is = 9 'for a 9 digit serial...
'If the third digit in the serial number is greater than the 4th digit in the decade field then the year value
'is the first three digits of the decade field with the third digit of the serial number field as the forth digit.
If Mid(serial,3,1) > Mid(decade,4,1) Then strYear = Left(decade,3) & Mid(serial,3,1)
'If the third digit in the serial number field is less than the 4th digit in the decade field, then the year value
'is the first three digits of the decade field with the third digit of the serial number field + 10.
If Mid(serial,3,1) < Mid(decade,4,1) Then strYear = Left(decade,3) & (Mid(serial,3,1)+10)
'If the 3rd digit is equal to the 4th digit??
Case Is = 8
repeat for 8
Case Else
'there is a problem with the serial number length?
End Select
I presume the data type would work with just adding 10 without needing to coerce data types. The sample code doesn't deal with declaring variables, for which I don't quite understand the source of anyway. Hope that gets you where you need to go.