1

如何正确用“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'
4

2 回答 2

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'
于 2013-04-18T19:06:34.350 回答
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您的目录名称中的代表。

编辑:由于此查询以 NUMERIC(22,0) 形式出现的 PATIENT_ID 似乎很重要,因此我添加了必要的 CAST。

于 2013-04-18T17:02:11.777 回答