shouldn't your function return a datetime instead of a char(8)?
anyway, you just wrap it with the function you wrote:
here's two ways, depending on if you change the function to return a datetime, or still a char:
...
,CASE
WHEN ISDATE([dbo].[fixDate](SUBSTRING(BulkColumn, 6, 8))) = 1
THEN CONVERT(datetime,[dbo].[fixDate](SUBSTRING(BulkColumn, 31, 8))) ELSE NULL
END AS yob
...
--or
--returns a datetime?
...
[dbo].[fixDate](SUBSTRING(BulkColumn, 31, 8)) AS yob
...
Lowell