String T-SQL替换字符串中的日期值

String T-SQL替换字符串中的日期值,string,tsql,replace,String,Tsql,Replace,有人能推荐一种方法来替换或删除字符串中的日期吗?我在想这样的事情;如果字符串类似于“%[0-9]/[0-9][0-9]/[0-9][0-9]%”,则将该段替换为NULL或“”,但不确定语法。如有任何建议,将不胜感激 编辑:包括示例和预期结果。 以下是字符串的示例: 病史:查看患者进行筛查。比较电影:与2009年4月24日之前的考试进行比较。技术:获得以下乳房X线视图:双侧颅尾侧和双侧中外侧斜位。乳房X光检查结果:乳房密度不均匀。这可能会降低钼靶摄影的灵敏度。没有肿块、不对称或可疑钙化。印象/建议

有人能推荐一种方法来替换或删除字符串中的日期吗?我在想这样的事情;如果字符串类似于
“%[0-9]/[0-9][0-9]/[0-9][0-9]%”
,则将该段替换为NULL或“”,但不确定语法。如有任何建议,将不胜感激

编辑:包括示例和预期结果。 以下是字符串的示例:

病史:查看患者进行筛查。比较电影:与2009年4月24日之前的考试进行比较。技术:获得以下乳房X线视图:双侧颅尾侧和双侧中外侧斜位。乳房X光检查结果:乳房密度不均匀。这可能会降低钼靶摄影的灵敏度。没有肿块、不对称或可疑钙化。印象/建议:没有乳腺癌的X线证据。建议在1年内进行常规乳房X光检查。评估:BI-RADS第1类:阴性

希望看到类似的内容:
病史:查看患者进行筛查。比较电影:与以前的考试进行比较,可以追溯到零。技术:获得以下乳房X线视图:双侧颅尾侧和双侧中外侧斜位。乳房X光检查结果:乳房密度不均匀。这可能会降低钼靶摄影的灵敏度。没有肿块、不对称或可疑钙化。印象/建议:没有乳腺癌的X线证据。建议在1年内进行常规乳房X光检查。评估:BI-RADS第1类:阴性

更新 在Ezequiel López Petrucci和Anthony Hancock发表评论之后, 我想出了一个更好的版本

为了处理日期在其月份部分可能有一个或两个数字的字符串格式,我使用了一个公共表表达式将一个数字更改为两个数字,然后用一个空字符串替换整个字符串:

;WITH CTE AS 
(
    SELECT STUFF(@string, PATINDEX('%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', @string)+1, 1, '00') As string
)

SELECT STUFF(string, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string), 8, '')
FROM CTE
为了处理多次出现的问题,我将几个递归公共表表达式链接在一起。这是一种万不得已的做法,因为它的性能可能会非常差:

;WITH CTE1 AS
(
    SELECT 1 as number, @string as string
    UNION ALL
    SELECT number+1, STUFF(string, PATINDEX('%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string)+1, 1, '00')
    FROM CTE1
    WHERE string LIKE '%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%'
),
CTE2 AS
(
    SELECT TOP(1) 1 as n, string
    FROM CTE1
    ORDER BY number DESC
    UNION ALL
    SELECT n+1, STUFF(string, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string), 8, '')
    FROM CTE2
    WHERE string LIKE '%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%'
)

SELECT TOP 1 string
FROM CTE2
ORDER BY n DESC
OPTION(MAXRECURSION 0)

使用和。
Patindex将返回字符串中遇到的第一个模式的索引,stuff将直接将一个字符串填充到另一个字符串中,而不是您指定的原始字符串的任何部分:

请注意,正如Ezequiel López Petrucci在评论中指出的那样,它只会取代第一次出现

样本数据:

DECLARE @string varchar(max) =
'HISTORY: Patient is seen for screening. 
 FILMS COMPARED: Comparison is made with prior exams dating back to 4/24/09. 
 TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
 MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
 IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
 ASSESSMENT:  BI-RADS Category 1:  Negative'
查询:

SELECT @string As Original

SELECT STUFF(@string, PATINDEX('%[0-9]/[0-9][0-9]/[0-9][0-9]%', @string), 7, '') As Result
结果:

Original
HISTORY: Patient is seen for screening. 
FILMS COMPARED: Comparison is made with prior exams dating back to 4/24/09. 
TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
ASSESSMENT:  BI-RADS Category 1:  Negative

Result
HISTORY: Patient is seen for screening. 
FILMS COMPARED: Comparison is made with prior exams dating back to . 
TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
ASSESSMENT:  BI-RADS Category 1:  Negative
HISTORY: Patient is seen for screening. FILMS COMPARED: Comparison is made with prior exams dating back to NULL. TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. ASSESSMENT:  BI-RADS Category 1:  Negative
如果您正在处理多个事件,并且

更新 在Ezequiel López Petrucci和Anthony Hancock发表评论之后, 我想出了一个更好的版本

为了处理日期在其月份部分可能有一个或两个数字的字符串格式,我使用了一个公共表表达式将一个数字更改为两个数字,然后用一个空字符串替换整个字符串:

;WITH CTE AS 
(
    SELECT STUFF(@string, PATINDEX('%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', @string)+1, 1, '00') As string
)

SELECT STUFF(string, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string), 8, '')
FROM CTE
为了处理多次出现的问题,我将几个递归公共表表达式链接在一起。这是一种万不得已的做法,因为它的性能可能会非常差:

;WITH CTE1 AS
(
    SELECT 1 as number, @string as string
    UNION ALL
    SELECT number+1, STUFF(string, PATINDEX('%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string)+1, 1, '00')
    FROM CTE1
    WHERE string LIKE '%[^0-9][0-9]/[0-9][0-9]/[0-9][0-9]%'
),
CTE2 AS
(
    SELECT TOP(1) 1 as n, string
    FROM CTE1
    ORDER BY number DESC
    UNION ALL
    SELECT n+1, STUFF(string, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%', string), 8, '')
    FROM CTE2
    WHERE string LIKE '%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%'
)

SELECT TOP 1 string
FROM CTE2
ORDER BY n DESC
OPTION(MAXRECURSION 0)

使用和。
Patindex将返回字符串中遇到的第一个模式的索引,stuff将直接将一个字符串填充到另一个字符串中,而不是您指定的原始字符串的任何部分:

请注意,正如Ezequiel López Petrucci在评论中指出的那样,它只会取代第一次出现

样本数据:

DECLARE @string varchar(max) =
'HISTORY: Patient is seen for screening. 
 FILMS COMPARED: Comparison is made with prior exams dating back to 4/24/09. 
 TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
 MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
 IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
 ASSESSMENT:  BI-RADS Category 1:  Negative'
查询:

SELECT @string As Original

SELECT STUFF(@string, PATINDEX('%[0-9]/[0-9][0-9]/[0-9][0-9]%', @string), 7, '') As Result
结果:

Original
HISTORY: Patient is seen for screening. 
FILMS COMPARED: Comparison is made with prior exams dating back to 4/24/09. 
TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
ASSESSMENT:  BI-RADS Category 1:  Negative

Result
HISTORY: Patient is seen for screening. 
FILMS COMPARED: Comparison is made with prior exams dating back to . 
TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  
MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. 
IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. 
ASSESSMENT:  BI-RADS Category 1:  Negative
HISTORY: Patient is seen for screening. FILMS COMPARED: Comparison is made with prior exams dating back to NULL. TECHNIQUE: The following mammographic views were obtained: bilateral craniocaudal and  bilateral mediolateral oblique.  MAMMOGRAM FINDINGS: The breasts are heterogeneously dense.  This may lower the sensitivity of  mammography. There are no masses, asymmetries, or suspicious calcifications. IMPRESSION / RECOMMENDATION: There is no mammographic evidence of malignancy. Routine follow-up mammogram in 1 year is recommended. ASSESSMENT:  BI-RADS Category 1:  Negative

如果你正在处理多个事件,并且

这应该会得到你所需要的,通常不是游标和标量函数的粉丝,但我的大脑没有为ITVF工作。它将捕获长度在7到10个字符之间的任何日期变化。(免责声明:TRY_CONVERT需要SQL 2012或更高版本)

创建函数dbo.DateStrip(@inString NVARCHAR(MAX))
返回NVARCHAR(最大值)
作为
开始
声明@outString NVARCHAR(最大值)
,@iterator INT=1
;
而@iterator6
开始
如果TRY_CONVERT(日期,子字符串(@inString,@iterator,@dateLength))不为空
开始
设置@inString=STUFF(@inString,@iterator,@dateLength,);
打破
结束
设置@dateLength-=1;
结束
结束
设置@iterator+=1;
结束
安装时返回
结束
去
声明@inString NVARCHAR(MAX)=病史:患者正在接受筛查。比较电影:与2009年4月24日之前的考试进行比较。技术:获得以下乳房X线视图:双侧颅尾侧和双侧中外侧斜位。乳房X光检查结果:乳房密度不均匀。这可能会降低钼靶摄影的灵敏度。没有肿块、不对称或可疑钙化。印象/建议:没有乳腺癌的X线证据。建议在1年内进行常规乳房X光检查。评估:BI-RADS第1类:负2019年10月12日';
选择dbo.DateStrip(@inString);

这应该可以满足您的需要,通常不喜欢游标和标量函数,但我的大脑不支持ITVF。它将捕获长度在7到10个字符之间的任何日期变化。(免责声明:TRY_CONVERT需要SQL 2012或更高版本)

创建函数dbo.DateStrip(@inString NVARCHAR(MAX))
返回NVARCHAR(最大值)
作为
开始
声明@outString NVARCHAR(最大值)
,@iterator INT=1
;
而@iterator