【问题标题】:How to INSERT time in SQL Server using data type time如何使用数据类型时间在 SQL Server 中插入时间
【发布时间】:2018-01-28 15:29:48
【问题描述】:

我正在编写查询以向表中插入数据,但我不断收到错误:

':'` 附近的语法不正确

这是创建表的查询:

CREATE TABLE Consultation_Slot
(
     Slot_ID CHAR(7) NOT NULL   PRIMARY KEY,
     Appointment_Purpose VARCHAR(255) NULL,
     Appointment_Status VARCHAR(11) NOT NULL,
     Cancellation_Reason VARCHAR(255) NULL,
     Slot_Time time(7) NOT NULL,
     Slot_Date DATE NOT NULL,
     Slot_Day CHAR(10) NOT NULL,
     Room_No VARCHAR(5) NOT NULL,
     Lecturer_ID CHAR(3) NOT NULL
        REFERENCES Lecturer(Lecturer_ID),
     Student_ID CHAR(6) NOT NULL
        REFERENCES Student(Student_ID),
     Schedule_ID CHAR(5) NOT NULL
        REFERENCES Weekly_Consultation_Schedule(Schedule_ID)
)

这是我尝试执行的INSERT 语句:

INSERT INTO Consultation_Slot 
VALUES (1000000,'I need to learn maths','avaliable','', 13:30, 1-28-2018, 
        'Sunday', 'RN001', 1111, 880001, 30001);
GO

【问题讨论】:

  • 您需要将日期和时间视为字符串(所以'13:30')。您不应该对日期使用区域格式;试试'20180128'。此外,不应将其标记为 mysql

标签: sql sql-server


【解决方案1】:

您需要用撇号将DATETIME 值括起来:

INSERT INTO Consultation_Slot VALUES
       (1000000,'I need to learn maths','avaliable','', '13:30', '1-28-2018',
        'Sunday', 'RN001', 1111, 880001, 30001);

只有数字类型的值不需要撇号。

还建议使用撇号将查询中的所有其他值括起来。它们确实是数字,但列类型是基于字符串的,因此将值提供为数字会导致不必要的隐式转换:

INSERT INTO Consultation_Slot VALUES
       ('1000000','I need to learn maths','avaliable','', '13:30', '1-28-2018',
        'Sunday', 'RN001', '1111', '880001', '30001');

但是,您的表格设计似乎不正确,其中一些列应该是数字而不是字符串,因此请检查您的表格设计。

【讨论】:

  • ID应该是整数吗?是的,我只是改变了它
  • 不一定,ID 可以是任何类型,但更常见的是整数。整数比其他类型执行得更好,所以只有在真正需要时才使用其他类型。例如,如果您正在为学生创建应用,并且学生证上的 ID 包含字符。
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多