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

Jap*_*can 1 sql t-sql vb.net sql-server 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
  ,
  )
Run Code Online (Sandbox Code Playgroud)

我想显示月和日 - 00000并在下面的示例中显示如下.

SequenceID
----------   
Jan01-00001       
Jan01-00002  
Run Code Online (Sandbox Code Playgroud)

请指教.感谢:D

Luk*_*zda 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;
Run Code Online (Sandbox Code Playgroud)

LiveDemo

输出:

?????????????????????????????????????????????????
? PatientID ?       my_date       ? SequenceID  ?
?????????????????????????????????????????????????
?         1 ? 01.01.2016 00:00:00 ? Jan01-00001 ?
?         2 ? 01.01.2016 00:00:00 ? Jan01-00002 ?
?????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)