我想在表列序列中显示日期

时间:2016-03-31 23:32:33

标签: sql sql-server vb.net tsql sql-server-2014

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

1 个答案:

答案 0 :(得分:7)

您应该重新考虑您的表格结构:

  1. 直接存储Age很棘手(每年都会更新)吗?您应该存储birthday并进行计算。
  2. 为什么2个字段表示性别? Male bitFemale bit。如果没有检查约束,您可以获得male 1 and female 1。如果需要,可能只有isMale bit就足够了,或者查找表中包含更多值。
  3. LabControlID使用GETDATE,并且与时间有关。当年份发生变化时,它也会发生变化。
  4. 对于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 ║
    ╚═══════════╩═════════════════════╩═════════════╝