SQL:如何在创建表时指定日期格式并填充它

时间:2017-11-08 11:37:49

标签: sql sql-server date

我想以'dd.mm.yyyy'格式保存日期。所以我读到SQL中的日期有不同的格式(通过我使用Visual Studio和SQL Server的方式)。

I tried this code:
CREATE TABLE APP(
    ID   INT NOT NULL,
    DT DATE FORMAT 'dd.mm.yyyy',
    ADDRESS  NVARCHAR (100) ,
    PRIMARY KEY (ID)
);

但它返回错误:

  

'FORMAT'附近的语法不正确。

之后我想使用这段代码:

INSERT INTO APP (ID, DT)
VALUES ('1','22.12.2016')

6 个答案:

答案 0 :(得分:5)

日期以内部格式存储。格式只对输入和输出有意义。

在您的情况下,您希望日期格式为德语(104),因此您可以使用:

CREATE TABLE APP (
    ID INT NOT NULL,
    DT DATE,
    ADDRESS  NVARCHAR(100),
    DT_FORMATTED AS (convert(varchar(255), dt, 104)),
    PRIMARY KEY (ID)
);

如果您愿意,可以将格式化日期作为单独的列包含在内:

dt_formatted

然后,您可以参考<form action="charge.php" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_ZCRfEl8XeRIbPHGIifY3THYC" data-amount="999" data-name="Demo Site" data-description="Widget" data-image="https://stripe.com/img/documentation/checkout/marketplace.png" data-locale="auto"> </script> 以获得所需格式的字符串。

答案 1 :(得分:2)

您不需要在表定义中指定格式,因为日期以二进制格式存储。

CREATE TABLE APP(
    ID   INT NOT NULL,
    DT DATE,
    ADDRESS  NVARCHAR (100) ,
    PRIMARY KEY (ID)
);

但是,当您尝试插入该表时,服务器将尝试在插入之前将字符串转换为日期。这可能会有问题,因为它无法判断12.11.2017是11月12日还是12月11日。为了解决这个问题,它使用了正在执行操作的用户帐户的本地化设置。

通常,您会发现运行该操作的帐户设置为美国格式,月份日和年份(MDY),此时您想要的是日月年(DMY)格式。告诉它日期部分序列的一种方法是使用DATEFORMAT设置,如下所示:

SET DATEFORMAT dmy;

INSERT INTO APP (ID, DT)
VALUES (1,'22.12.2016')

另一种方法是使用CONVERT函数将字符串转换为日期,并告诉它日期格式是什么。德语格式的格式为numeric codes,如104:像这样:

INSERT INTO APP (ID, DT)
VALUES (2,CONVERT(date,'22.12.2016',104))

答案 2 :(得分:1)

使用此

CREATE TABLE APP(
    ID   INT NOT NULL,
    DT DATE ,
    ADDRESS  NVARCHAR (100) ,
    PRIMARY KEY (ID)
);

答案 3 :(得分:1)

其默认设置为yyyy-MM-dd

不,不是。根本没有与该字段关联的格式信息。

该值未由数据库格式化,仅作为时间点返回。将该值格式化为文本表示是由从数据库获取数据的应用程序完成的。

因此,您无法在数据库中更改日期值的格式,您必须更改显示数据的位置。

答案 4 :(得分:0)

日期以内部格式存储。 格式仅对输入和输出有意义。

您可以将格式日期包括在单独的列中:

SQL Server支持日期格式,您必须使用以下日期格式

随着世纪(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)
);

答案 5 :(得分:0)

使用它。

创建表:

CREATE TABLE EMP
(EID NUMBER(20),
ENAME VARCHAR2(20),
DT DATE,
SAL NUMBER(20));

插入表格:

INSERT INTO EMP (EID,ENAME,DT,SAL) VALUES(01,'ABCDE','11.NOV.2011',10000);

上表的O / P:

SELECT * FROM EMP;

EID ENAME DT SAL

01 ABCDE 11-DEC-11 10000