【问题标题】:I want to display date in table column sequence我想在表格列序列中显示日期
【发布时间】:2016-03-31 23:32:33
【问题描述】:
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

【问题讨论】:

  • 为什么要这样做?任何用例?在不知道的情况下,计算列是我可以建议的唯一选择,它基于日期和标识列
  • 每年有多少患者?当PatientID 达到 100,000 时,你会退休还是其他地方?

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


【解决方案1】:

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

  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 ║
╚═══════════╩═════════════════════╩═════════════╝

【讨论】:

  • 您好,先生,我怎么换成这个? 1. 直接存储年龄很棘手(你会每年更新它吗)。您应该存储生日并计算它。 2. 为什么用 2 个字段来表示性别?公钻头和母钻头。如果没有检查约束,您可以获得男性 1 和女性 1。也许只是 isMale 位就足够了,或者如果需要,可以查找具有更多值的表。
  • @JaphetCompendioBatucan 如果此答案解决了您的问题,则将其标记为答案。因此,与您有相同问题的其他人会知道答案。如果您还有其他问题,只需编辑您的问题,或创建另一个帖子。如果您在评论中提出问题,则很难被其他人看到
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多