【发布时间】:2018-12-19 12:41:23
【问题描述】:
我已经创建了一个选择语句
SELECT [source_name]+''''/''''+[schema_name]+''''/''''+[table_name] AS [path],
[application_name],
[database_name],
[schema_name],
[table_name],
[source_name],
Substring(source_table_name, 0, 3) AS source,
replace([query],''''desc'''',''''"DESC"'''') AS query,
FROM [cdi].[parameter_master] p (nolock)
JOIN [cdi].application_master a (nolock)
ON a.application_id = p.application_id
在这部分
replace([query],''''desc'''',''''\"DESC\"'''') as query
[查询]值为
SELECT a.desc,
a.occ_desc AS occ_desc,
a.dth_dt AS dth_dt,
a.hire_dt AS hire_dt,
a.insd_empe_nbr AS insd_empe_nbr,
a.surg_ind AS surg_ind,
a.src_clm_pty_id AS src_clm_pty_id,
a.elmtry_clm_anchr_id AS elmtry_clm_anchr_id,
a.lic_nbr_txt AS lic_nbr_txt,
a.atty_hire_rsn_desc AS atty_hire_rsn_desc,
a.atty_catg_desc AS atty_catg_desc,
a.dfns_appt_dt AS dfns_appt_dt,
a.empr_nm AS empr_nm,
a.extl_refr_cd AS extl_refr_cd,
a.src_sys_cd AS src_sys_cd
FROM dbaall.pty_rol_in_clm a
WHERE a.e_tistmp >= timestamp('2018-01-01 00:00:00')
OR (
a.e_to_tistmp >= timestamp('2018-01-01 00:00:00')
AND a.e_to_tistmp < timestamp('2018-03-31 00:00:00'))
我只想将a.DESC 替换为a.\"DESC\"
但replace() 函数会替换 [query] 字符串中出现的所有 DESC。
我想写一个 case when 语句基于 if .desc found then only replace else string 不应该被替换。
我该如何解决这个问题?
【问题讨论】:
-
也许很简单:
replace([query],''''a.DESC'''',''''a.\"DESC\"'''')? -
或
replace([query],''''.DESC'''',''''.\"DESC\"'''') -
有点跑题了,但你应该先阅读这篇文章,然后再继续到处喷 NOLOCK。 blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere
-
谢谢@killer Queen,@JNevil 的回答。我通过 Killer Queen 的方法解决了这个问题。@Sean Lange- 感谢您分享博客。
标签: sql-server replace case-when