Unless you are going to do any manipulation on that particular data, it's better to use VARCHAR or NVARCHAR datatype with proper validation.
If you want to store data in the format Year/Month/{patient_no}, you can create a simple function and call that when required.
I haven't tested it, but you could do something like-
CREATE FUNCTION [dbo].[fuGenerateNewPatientId] ()
RETURNS VARCHAR
AS
BEGIN
DECLARE @NewPatientId VARCHAR(20)
DECLARE @LastId INT
IF(EXISTS(SELECT 1 FROM dbo.Patients WHERE PatientId LIKE (CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR)+'/'+RIGHT('0'+CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR),2))+'/'+'%'))
BEGIN
SELECT @LastId=MAX(CAST(RIGHT(PatientId,LEN(PatientId)-8) AS INT))
FROM dbo.Patients
WHERE PatientId LIKE (CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR)+'/'+RIGHT('0'+CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR),2))+'/'+'%'
SELECT @NewPatientId=CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR)+'/'+RIGHT('0'+CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR),2))+'/'+CAST(@LastId+1 AS VARCHAR)
END
ELSE
BEGIN
SELECT @NewPatientId=CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR)+'/'+RIGHT('0'+CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR),2))+'/'+'1'
END
RETURN @NewPatientId
END
It looks little larger but should do your job.
Hope, it helps :)
In case further help is required, please let me know !