有一个名为myDate的文本字段。此字段可以包含1)'会计年度结束 someDate '或2)' dateA 到' dateB '。
在情况1)中,我想将字段date1 =设置为 someDate 。
在情况2)中,我想设置字段date1 = dateA 和字段date2 = dateB 。
所有日期( someDate , dateA , dateB )可以写成2000年1月1日的1/1/2000,或者2000年1月1日。
如何从myDate中提取日期并将其插入正确的字段?
答案 0 :(得分:5)
这看起来并不复杂,不需要“正确”的正则表达式。这些文本日期可以通过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日,但是4月3日是4月3日,还是3月4日?