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)
正如我所怀疑的:
[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)
然后您可以在表中插入日期和时间值。
| 归档时间: |
|
| 查看次数: |
2496 次 |
| 最近记录: |