2016-03-31 28 views
1
CREATE TABLE tbl_Patient 
    (
    PatientID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    LabControlID AS Cast(Right(Year(getDate()),4) as varchar(4)) +'-' + RIGHT('00000' + CAST(PatientID AS VARCHAR(5)), 5), 
    SequenceID AS "--Codes to display date--" 
    ,First_Name varchar(50) 
    ,Last_Name varchar(50) 
    ,Age int 
    ,Male bit 
    ,Female bit 
    , 
) 

我想在下面的示例中显示月份和日期 - 00000并显示如下所示。我想在表列序列中显示日期

SequenceID 
---------- 
Jan01-00001  
Jan01-00002 

请指教。谢谢:d

+0

为什么你想这样做?任何用例?不知道,计算列是我可以建议的唯一选项,它基于日期和标识列 – FLICKER

+0

每年有多少患者?当“PatientID”达到100,000时,你会退休吗? – HABO

回答

7

你应该重新考虑你的表结构:

  1. 存储Age直接是棘手的(每年将更新它)。你应该存储birthday并计算它。
  2. 为什么2个字段表示性别? Male bitFemale bit。没有检查限制,你可以得到male 1 and female 1。如果需要,可能只需要isMale bit就足够了,或者查找表中有更多值。
  3. LabControlID使用GETDATE,它是随时间变化的。当年会改变它也会改变。

至于SequenceId你可以使用FORMAT和存储date正常列:

CREATE TABLE tbl_Patient 
(
    PatientID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    my_date DATE, 
    SequenceID AS CONCAT(FORMAT(my_date,'MMMdd','en-US'),'-',FORMAT(PatientID,'0000#')) 
    -- ... 
); 

INSERT INTO tbl_Patient(my_date)VALUES ('2016-01-01'), ('2016-01-01'); 

SELECT * FROM tbl_Patient; 

LiveDemo

输出:

╔═══════════╦═════════════════════╦═════════════╗ 
║ PatientID ║  my_date  ║ SequenceID ║ 
╠═══════════╬═════════════════════╬═════════════╣ 
║   1 ║ 01.01.2016 00:00:00 ║ Jan01-00001 ║ 
║   2 ║ 01.01.2016 00:00:00 ║ Jan01-00002 ║ 
╚═══════════╩═════════════════════╩═════════════╝ 
+0

你好,先生,我怎么能换成这个呢? 1.直接存储年龄是棘手的(你会每年更新一次)。你应该存储生日并计算它。 2.为什么2个字段表示性别?男性位和女性位。如果没有检查限制,你可以得到男性1和女性1.如果需要,可能只是马甲位就足够了,或者查找表中有更多值。 –

+1

@JaphetCompendioBatucan如果这个答案解决了我们的问题,那么将其标记为答案。所以,与你有同样问题的其他人会知道答案。如果您有其他问题,只需编辑您的问题,或创建另一个帖子。如果你在评论中提问,很难被其他人看到 – Mark

相关问题