这看起来还不够复杂,需要“适当的”正则表达式。您可以通过运行SQL查询将这些文本日期直接解析为DATETIME类型,而不会产生任何混乱。
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/1/2000总是定为1月1日,但是3/4/2000是4月3日还是3月4日?



