创建表查询中的T-SQL日期格式

时间:2018-11-04 22:07:08

标签: sql-server tsql

我的问题:在创建表期间是否可以在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。

感谢帮助

4 个答案:

答案 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中选择它。它按我的意愿显示。

谢谢!