将 varchar 数据类型转换为 datetime 数据类型导致超出范围的值。SQL Server

3

我正在尝试创建下面的表格,但出现了如下错误:

CREATE TABLE Worker 
(
    WORKER_ID INT NOT NULL PRIMARY KEY,
    FIRST_NAME CHAR(25),
    LAST_NAME CHAR(25),
    SALARY INT,
    JOINING_DATE DATETIME,
    DEPARTMENT CHAR(25)
);

INSERT INTO Worker 
    (WORKER_ID, FIRST_NAME, LAST_NAME, SALARY, JOINING_DATE, DEPARTMENT) VALUES
        (001, 'Monika', 'Arora', 100000, '20-02-2014 09.00.00', 'HR'),
        (002, 'Niharika', 'Verma', 80000, '11-06-2014 09.00.00', 'Admin'),
        (003, 'Vishal', 'Singhal', 300000, '20-02-2014 09.00.00', 'HR'),
        (004, 'Amitabh', 'Singh', 500000, '20-02-2014 09.00.00', 'Admin'),
        (005, 'Vivek', 'Bhati', 500000, '11-06-2014 09.00.00', 'Admin'),
        (006, 'Vipul', 'Diwan', 200000, '11-06-2014 09.00.00', 'Account'),
        (007, 'Satish', 'Kumar', 75000, '20-01-2014 09.00.00', 'Account'),
        (008, 'Geetika', 'Chauhan', 90000, '11-04-2014 09.00.00', 'Admin');

错误:

 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

我不明白为什么会出现这个错误。我已经清楚地将joining_date的类型指定为datetime,但还是出现了这个错误。

编辑: 根据下面的评论,将日期格式更改为dd-mm-yyyy后仍然出现相同的错误。


请使用yyyy-mm-dd格式指定日期,这样就不会产生关于你使用的是dd-mm-yy还是mm-dd-yy甚至其他格式的歧义。计算机无法自动判断你打算使用哪种格式。并非每个文化都使用相同的日期字符串格式,其中一些格式很难区分。但是yyyy-mm-dd与任何其他常见格式都没有重叠,因此被视为日期的防错、非特定文化的字符串格式。 - ADyson
将日期格式更改为yyyy-mm-dd而不是dd-mm-yyyy。 - forpas
已尝试使用 yyyy-mm-dd 进行检查,但不起作用。出现相同的错误。 - noob
1
将代码以更改的格式发布。 - forpas
这个回答解决了你的问题吗?SQL - 将varchar数据类型转换为datetime数据类型导致超出范围的值 - Michael Freidgeim
2个回答

8
你的查询语句在插入部分存在两个问题。首先,时间分隔符应该是冒号(:),而不是点号(.);其次,年份应该完整地写出,例如'20-02-14 09:00:00'需要改为'2020-02-14 09:00:00'
Your amended query below
CREATE TABLE Worker 
(
    WORKER_ID INT NOT NULL PRIMARY KEY,
    FIRST_NAME CHAR(25),
    LAST_NAME CHAR(25),
    SALARY INT,
    JOINING_DATE DATETIME,
    DEPARTMENT CHAR(25)
);

INSERT INTO Worker 
    (WORKER_ID, FIRST_NAME, LAST_NAME, SALARY, JOINING_DATE, DEPARTMENT) VALUES
        (001, 'Monika', 'Arora', 100000, '2020-02-14 09:00:00', 'HR'),
        (002, 'Niharika', 'Verma', 80000, '2011-06-14 09:00:00', 'Admin'),
        (003, 'Vishal', 'Singhal', 300000, '2020-02-14 09:00:00', 'HR'),
        (004, 'Amitabh', 'Singh', 500000, '2020-02-14 09:00:00', 'Admin'),
        (005, 'Vivek', 'Bhati', 500000, '2011-06-14 09:00:00', 'Admin'),
        (006, 'Vipul', 'Diwan', 200000, '2011-06-14 09:00:00', 'Account'),
        (007, 'Satish', 'Kumar', 75000, '2020-01-14 09:00:00', 'Account'),
        (008, 'Geetika', 'Chauhan', 90000, '2011-04-14 09:00:00', 'Admin');

3

很可能SQL Server正在尝试解析您提供的另一种格式的数据。

请检查此表格,并根据其设置格式。

例如:

convert(datetime, '2020-02-15 21:10:09', 120)

120 = yyyy-mm-dd hh:mi:ss (24h)

请编辑整个代码并发送...我不明白如何使用它...我应该在插入之前还是之后使用它等? - noob
@ShailajaGuptaKapoor 我已经提供了链接。请按照您的需求进行检查和更新。 - zealous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接