如何用'M'正确替换第一个字符?假设您有一个PATIENT_ID_NONNUM ='M001',我们希望得到1001。
UPDATE [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_SRC_BIOMETRICS]
SET PATIENT_ID = CONVERT(NUMERIC(22,0),'1' + CONVERT(NVARCHAR(50),PATIENT_ID))
WHERE SUBSTRING(PATIENT_ID_NONNUM, 1, 1) = 'M'
编辑:
UPDATE [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_SRC_MEDICATION]
SET PATIENT_ID = CONVERT(NUMERIC(22,0),CONVERT(NVARCHAR(50),'1') + CONVERT(NVARCHAR(50),SUBSTRING(PATIENT_ID_NONNUM, 2, LEN(PATIENT_ID_NONNUM))))
WHERE SUBSTRING(PATIENT_ID_NONNUM, 1, 1) = 'M'
答案 0 :(得分:2)
我发现STUFF()
(经常被忽视的功能)和LEFT()
更具可读性,但其他人可能不同意:
UPDATE [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_SRC_BIOMETRICS]
SET PATIENT_ID = CAST(STUFF(PATIENT_ID_NONNUM, 1, 1, '1') AS NUMERIC(22,0))
WHERE LEFT(PATIENT_ID_NONNUM, 1) = 'M'
答案 1 :(得分:1)
我会建议这样的事情:
UPDATE [HIMC_I2B2_LZ-PROD].[dbo].[I2B2_SRC_BIOMETRICS]
SET PATIENT_ID = CAST(('1' + SUBSTRING(PATIENT_ID_NONNUM, 2, LEN(PATIENT_ID_NONNUM) - 1)) AS NUMERIC(22,0))
WHERE SUBSTRING(PATIENT_ID_NONNUM, 1, 1) = 'M'
这将找到第一个字符为M
的所有记录,并将第一个字符替换为1
。我没有对此进行测试,但我相信它应该可以正常工作。
我还建议不要在生产数据库上运行这种类型的操作作为测试,我认为这是-PROD
代表你的目录名称。
编辑:由于此查询以PATIENT_ID作为NUMERIC(22,0)显示出来似乎很重要,因此我添加了必要的CAST。