在前面添加数字到前面的字符串0

时间:2013-04-18 16:51:44

标签: sql-server-2008 tsql append prefix

如何用'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'

2 个答案:

答案 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。