我的问题:在创建表期间是否可以在T-SQL中声明日期格式?
CREATE TABLE [dbo].[Post]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR(MAX) NULL,
[RowNo] INT NULL,
[ColNo] INT NULL,
[Deadline] DATE NULL,
CONSTRAINT [PK_KtoCo]
PRIMARY KEY CLUSTERED ([Id] ASC)
);
这是VS 2017表格设计器的代码。
此刻,日期还以00:00格式显示时间。我只想要dd / mm / yyyy。
感谢帮助
答案 0 :(得分:0)
否,但是您可以添加一个计算列,这样您就可以在输出中随意看到它:
CREATE TABLE [dbo].[Post] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR (MAX) NULL,
[RowNo] INT NULL,
[ColNo] INT NULL,
[Deadline] DATE NULL,
Deadline as (convert(varchar(255), deadline, ?))
CONSTRAINT [PK_KtoCo] PRIMARY KEY CLUSTERED ([Id] ASC)
);
?
是您首选的日期格式。
答案 1 :(得分:0)
不,您不能。 Date and time data types are not stored with a display format,
只有日期/时间的字符串表示形式才具有显示格式。
您可以按照戈登·利诺夫(Gordon Linoff)在他的答案中建议的方式添加计算列-您甚至可以将其标记为持久(这意味着该列实际上将保存为数据,而不是每次使用时都重新计算)-但我不是因此请确保这是一个好主意-数据库不应该因演示文稿问题而烦恼,并且日期/时间字符串表示格式绝对是演示文稿问题。这是我要留给表示层的东西。
黄金法则是-只要您不需要人工阅读它,最好将其保留在原始数据类型中-在处理复杂问题时尤其正确如日期。
此外,您想要的格式是模棱两可的-除非您事先知道为dd/mm/yyyy
,否则您无法确定01/04/2018
是7月1日还是1月4日-计算机会使用本地设置来解决这些问题-因此,如果您要在数据库中将日期作为字符串传递到前端应用程序的位置,并且在此过程中需要进行一些计算(例如计算下一个假期之前需要花费多少时间,例如)-由于字符串表示格式的模棱两可,您可能会得到错误的结果。
答案 2 :(得分:0)
日期以内部格式存储。 格式仅对输入和输出有意义。 您可以将格式化日期作为单独的列添加:
SQL Server支持日期格式,因此在您的情况下(dd / mm / yyyy),您必须使用以下日期格式(103)
同世纪(yyyy)|标准|输入/输出
103 | British/French | 103 = dd/mm/yyyy
您可以使用以下经过修改的查询
CREATE TABLE [dbo].[Post]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR(MAX) NULL,
[RowNo] INT NULL,
[ColNo] INT NULL,
[Deadline] (CONVERT(VARCHAR(255), dt, 103)), -- Include the formatted date as a separate column
CONSTRAINT [PK_KtoCo]
PRIMARY KEY CLUSTERED ([Id] ASC)
);
答案 3 :(得分:0)
谢谢你们所做的一切。
我的解决方法是:我希望这个日期仅用于阅读。绝对没有逻辑,因此我将列Date设置为varchar类型。在模型中,我将此值声明为dateTime,因此用户从datepicker中选择它。它按我的意愿显示。
谢谢!