dmr*_*dmr 3 regex sql sql-server
有一个名为myDate的文本字段.此字段可以包含1)'结束someDate的财政年度'或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)
Run Code Online (Sandbox Code Playgroud)
要获得-1年和+1天,只需使用DATEADD,例如
SELECT DATEADD(dd, 1, DATEADD(yy, -1, 'January 1 2000'))
Run Code Online (Sandbox Code Playgroud)
...所以,你真正需要做的就是应对你的两个不同的情况并抓住日期.所以,像:
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
Run Code Online (Sandbox Code Playgroud)
......应该做的伎俩.我没有真正测试过,但希望它会给你足够的想法,看看我得到了什么.
请注意,某些结果可能取决于服务器/数据库的语言设置.例如,虽然2000年1月1日总是1月1日,但是4月3日是3月3日,也就是3月4日?