如何使SQL内部函数默认为ISO 8061格式

时间:2017-03-19 13:49:13

标签: sql sql-server

  

Microsoft SQL Server 2016(RTM) - 13.0.1601.5(X64)
  版权所有(c)Windows 10 Pro 6.3(Build 14393)上的Microsoft Corporation Express Edition(64位)

  • 服务器排序规则:SQL_Latin1_General_CP1_CI_AS
  • 语言:英语(美国)

我正在使用内部getdate()函数自动填充DateCreated数据类型的DATE列。

事实上,当输入新产品时,我可以看到以MM/dd/YYYY格式(即3/18/2017)格式创建日期值。

为什么?有没有办法强制getdate()使用ISO 8061格式?

CREATE TABLE [dbo].[Products] 
(
     [ID]               INT            IDENTITY (1, 1) NOT NULL,
     [Name]             NVARCHAR (50)  NOT NULL,
     [Description]      NVARCHAR (500) NOT NULL,
     [IsDeleted]        BIT            NOT NULL,
     [IsApproved]       BIT            NOT NULL,
     [CategoryID]       INT            NOT NULL,
     [UserID]           NVARCHAR (MAX) NOT NULL,
     [DateCreated]      DATE           DEFAULT (getdate()) NULL,
     [DateExpire]       DATE           CONSTRAINT [CONSTRAINT_NAME] DEFAULT (dateadd(month,(1),getdate())) NULL,
     [DateLastModified] DATE           DEFAULT (getdate()) NULL,

     CONSTRAINT [PK_dbo.Products] 
         PRIMARY KEY CLUSTERED ([ID] ASC),
     CONSTRAINT [FK_dbo.Products_dbo.Categories_CategoryID] 
         FOREIGN KEY ([CategoryID]) REFERENCES [dbo].[Categories] ([ID])
);

2 个答案:

答案 0 :(得分:7)

datedatetime数据类型的值不以sql server格式存储。如果您希望以不同的格式查看日期,则可以在转换为varchar(或nvarcharnchar,{{1时操纵日期和日期时间数据类型的显示方式使用一些内置函数的数据类型。

通常使用convert() styles

char

返回:select convert(varchar(10),getdate(),120)

在sql server 2012+中,您可以使用format()

2017-03-19

返回:select format(getdate(),'yyyy-MM-dd')

2017-03-19可能会慢一点,请看一下:format() is nice and all, but… - Aaron Bertand

答案 1 :(得分:0)

未在日期数据类型中存储的数据中设置格式。

但是,您可以设置用于直观显示日期的格式。

  

SET DATEFORMAT {格式| @format_var}

--  For example set date format to day/month/year.  
SET DATEFORMAT dmy;  
GO  

format | @format_var

是日期部分的顺序。有效参数为mdydmyymdydmmyddym

ydmdatedatetime2数据类型不支持datetimeoffset

只是为了增加清晰度,这与日期和时间样式格式不同,如varchar,例如:

CONVERT(VARCHAR(20), GETDATE(), 100)