DATETIME 给出 SQL Server 中没有时间的日期

Mad*_*ist 0 sql sql-server date insert

我有一个 SQL 查询,应该将datetime. 我以不同的方式尝试过,但每种方式都出了问题。

INSERT INTO SETTLEMENT_WIN (COUNTRY,
                            COMMODITY,
                            MARKET_PLACE,
                            START_TIME,
                            END_TIME)
VALUES ('BE', 'EL', NULL, CONVERT(datetime, '2015-12-14 15:45', 'YYYY-MM-DD HH24:MI'), CONVERT(datetime, '2015-12-14 16:00', 'YYYY-MM-DD HH24:MI'));
Run Code Online (Sandbox Code Playgroud)

给出错误:

消息 8116,级别 16,状态 1,第 1 行 参数数据类型 varchar 对于转换函数的参数 3 无效。

INSERT INTO SETTLEMENT_WIN (COUNTRY,
                            COMMODITY,
                            MARKET_PLACE,
                            START_TIME,
                            END_TIME)
VALUES ('BE', 'EL', NULL, CONVERT(datetime, '2008-12-14 15:45', 120), CONVERT(datetime, '2015-12-14 16:00', 120));
Run Code Online (Sandbox Code Playgroud)

插入行但其中START_TIME只有END_TIME日期但没有时间

在此输入图像描述

然后我尝试只插入时间,但即使这样也只插入日期(不允许我更改日期格式)。

Declare @Date1 datetime ='2008-12-14 15:45';
Declare @Date2 datetime ='2015-12-14 16:00';

INSERT INTO SETTLEMENT_WIN (COUNTRY,
                            COMMODITY,
                            MARKET_PLACE,
                            START_TIME,
                            END_TIME)
VALUES ('BE', 'EL', NULL, CONVERT(datetime, @Date1, 108), CONVERT(datetime, @Date2, 108));
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我正在使用 Microsoft SQL Server Management Studio 17。

我的表的声明CREATE是:

CREATE TABLE [SETTLEMENT_WIN] ([SW_ID] [numeric](18, 0) IDENTITY(1, 1) NOT NULL,
                               [COUNTRY] [varchar](32) NOT NULL,
                               [COMMODITY] [varchar](32) NOT NULL,
                               [MARKET_PLACE] [varchar](32),
                               [START_TIME] [date] NOT NULL,
                               [END_TIME] [date] NOT NULL,
                               CONSTRAINT [SW_PK]
                                   PRIMARY KEY ([SW_ID]));
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

正如我所怀疑的:

[START_TIME] [date] NOT NULL,
[END_TIME] [date] NOT NULL,
Run Code Online (Sandbox Code Playgroud)

如果您datetime向date数据类型提供值,则该值的时间部分将丢失。尝试:

DECLARE @d date;
SET @d = '2018-08-02T11:15:59.462'
SELECT @d;
Run Code Online (Sandbox Code Playgroud)

注意它返回2018-08-02。Adate就是一个日期。需要使用datetime,datetime2或datetimeoffset来存储日期和时间。您需要修复表才能解决此问题:

ALTER TABLE dbo.SETTLEMENT_WIN ALTER COLUMN [START_TIME] datetime2(0) NOT NULL;
ALTER TABLE dbo.SETTLEMENT_WIN ALTER COLUMN [END_TIME] datetime2(0) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

然后您可以在表中插入日期和时间值。