2016-03-31 48 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

相關問題