有一个名为myDate的文本字段。该字段可以包含1)“结束 某日期 的会计年度”或2)“ dateA 到” dateB ”。
在情况1)中,我想将字段date1 =设置为 someDate 。
在情况2)中,我要设置字段date1 = dateA 和字段date2 = dateB 。
所有日期( someDate , dateA , dateB )都可以写为2000年1月1日,2000年1月1日或2000年1月1日。
我该如何从myDate中提取日期并将其插入正确的字段中?
这看起来还不够复杂,需要“适当的”正则表达式。您可以通过运行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日?