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