当我尝试在所有其他表中插入日期值时,除一个表外,其他表均工作正常。无论我尝试使用哪种格式,我总是会收到错误消息,即插入的值无法从输入的char转换为预期的日期格式。
这就是我插入值的方式
-- ServiceTicket
INSERT INTO ServiceTicket
VALUES ('90000', '01-5-2019', '50000', '10000', '70000', 200.00, 100.00, 5.00, 350.00) --Error converting into DATE type
这是表结构:
CREATE TABLE dbo.ServiceTicket (
ticketIssueNo INT NOT NULL IDENTITY(1,1) PRIMARY KEY, --Identity autoincrements
serviceDate DATE NOT NULL,
vehicleId CHAR(8) NOT NULL,
customerId CHAR(8) NOT NULL,
inspectionId CHAR(8) NOT NULL,
serviceCost DECIMAL(10,4) NOT NULL CHECK(serviceCost BETWEEN 0.0 AND 99999.0) DEFAULT 0.0,
inspectionCost DECIMAL(10,4) NOT NULL CHECK(inspectionCost BETWEEN 0.0 AND 99999.0) DEFAULT 0.0,
repairCost DECIMAL(2,2) NOT NULL CHECK(repairCost BETWEEN 0.0 AND 99999.0) DEFAULT 0.0,
GST DECIMAL(10,4) NOT NULL DEFAULT 0.0,
amountDue DECIMAL(10,4) NOT NULL CHECK(amountDue BETWEEN 0.0 AND 99999.0) DEFAULT 0.0,
FOREIGN KEY(vehicleId) REFERENCES Vehicle(vehicleId)
ON UPDATE NO ACTION,
FOREIGN KEY(inspectionId) REFERENCES VehicleInspection(inspectionId)
ON UPDATE NO ACTION,
FOREIGN KEY(customerId) REFERENCES Customer(customerId)
ON UPDATE NO ACTION
)
GO
我可能会忽略一些东西。
答案 0 :(得分:1)
以下是根据您发布的DDL正确编写的插入语句的等效项:
INSERT INTO ServiceTicket
(serviceDate, vehicleId , customerId, inspectionId , serviceCost , inspectionCost, repairCost, GST , amountDue) VALUES
('90000' , '01-5-2019' , '50000' , '10000' , '70000' , 200.00 , 100.00 , 5.00 , 350.00)
我使用制表符,以便每个值都将与其所进入的列完美对齐,这在列的列表较长时会很有帮助。
如您所见,serviceDate
的值为'90000'
-显然应该为'01-5-2019'
yyyy-mm-ddThh:mm:ss
或yyyymmddThhmmss
。如果您仅将仅日期的字符串值插入到DateTime
数据类型的列/变量中,请确保仅使用第二种(yyyymmdd
)格式-因为yyyy-mm-dd
is still culture dependent with DateTime
(但不能用于{ {1}}或与Date
一起使用-这是您永远不再使用DateTime2
的另一个原因。所以编写插入语句的正确方法是:
DateTime
(也就是说,假设01-5-2019代表5月1日。如果代表1月5日,则应为INSERT INTO ServiceTicket
(serviceDate, vehicleId , customerId, inspectionId , serviceCost , inspectionCost, repairCost, GST , amountDue) VALUES
('2019-05-01', '90000' , '50000' , '10000' , '70000' , 200.00 , 100.00 , 5.00 , 350.00)
)。
答案 1 :(得分:0)
您使用的日期格式'01-5-2019'
似乎不是SQL Server的默认接受日期文字。尝试使用'20190501'
:
INSERT INTO ServiceTicket (serviceDate, ... <other columns>)
VALUES
('20190501', ...);
请注意,YYYYMMDD
是一种明确的,不可分离的ISO格式,正如documentation所讨论的那样。
答案 2 :(得分:0)
答案 3 :(得分:0)
在SQL中插入日期类型的格式为YYYY-dd-MM,您需要将其更改为'2019-05-01'
答案 4 :(得分:0)
将日期格式从'01-5-2019'
更改为'2019-05-01'
。
传递日期改为'01-5-2019'
传递CAST('01-5-2019' AS DATE)
。