I wrote a replacement ufdSubStr() a looong time ago to provide support for negative paramaters. It might even have preceded LEFT() and RIGHT().

udfSubStr()

That 9 year maximum on searches is beginning to look like it might be a problem soon!