Это не выглядит достаточно сложным, чтобы нуждаться в "правильном" регулярном выражении. Эти текстовые даты могут быть проанализированы непосредственно в тип DATETIME SQL без каких-либо изменений, как вы можете увидеть, выполнив этот запрос:
SELECT CAST('1/1/2000' AS DATETIME), CAST('January 1, 2000' AS DATETIME), CAST('Jan 1, 2000' AS DATETIME)
Чтобы получить -1 год и +1 день, просто используйте DATEADD, например,
SELECT DATEADD(dd, 1, DATEADD(yy, -1, 'January 1 2000'))
... итак, все, что вам действительно нужно сделать, это справиться с вашими двумя разными делами и забрать даты. Итак, что-то вроде:
SELECT
CASE
WHEN myDate LIKE 'fiscal year ending %' THEN CAST(DATEADD(dd, 1, DATEADD(yy, -1, REPLACE(myDate, 'fiscal year ending ', ''))) AS DATETIME)
ELSE CAST(LEFT(myDate, PATINDEX('% to %', myDate)) AS DATETIME)
END 'FromDate',
CASE
WHEN myDate LIKE 'fiscal year ending %' THEN CAST(REPLACE(myDate, 'fiscal year ending ', '') AS DATETIME)
ELSE CAST(SUBSTRING(myDate, PATINDEX('% to %', myDate) + 4, 100) AS DATETIME)
END 'ToDate'
FROM
...whatever
... должен сделать свое дело. Я на самом деле не проверял это, но, надеюсь, это даст вам достаточно идеи, чтобы увидеть, к чему я клоню.
Обратите внимание, что некоторые из результатов, вероятно, будут зависеть от языковых настроек вашего сервера / базы данных. Например, если 1 января 2000 года всегда будет 1 января, 3/4/2000 третьего апреля или четвертого марта?