如何在SQL Server中使用“date”数据types?

你好朋友我需要你的帮助,当我试图创build与数据types“date”表中的列它给了我错误,我不能在这里添加它是我的代码

Create table Orders ( Order_ID INT Primary Key, Book_name varchar(100) , isbn varchar(100) , Customer_ID INT Foreign key references Customer, Order_date date, ); 

另一件事,它需要从我得到的东西之前创build一个date

要更清楚:询问的查询表明查找8月2日之前的date我该怎么做

我试图input这样的数据

 Insert Into Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (1, 'Design User Interface',9345678210123, 1, '02-08-2015'); Insert Into Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (2, 'Fire',9654693261489, 1, '05-08-2015'); Insert Into Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (3, 'The Odyssey',9654864332511, 2, '01-08-2015'); Insert Into Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (4, 'Anatomy',9654877777755, 2, '30-07-2015'); Insert Into Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (5, 'Surgery',9654864951753, 2, '01-07-2015'); 

但是,它只接受前3插入和最后两个它给我错误:/

你对“最后两个”没有问题。

但是,你们所有人都有问题,但是一个接一个。

文字date取决于您系统的文化

您的date被解释为MM-DD-YYYY。 这个解释是依赖于你的系统的文化。 前三个变成错误的date,但工作。 第四次rest,第五次不会执行(由于之前的错误)。

所以实际的错误在于第四行。

每当你处理date,使用文化独立的格式。 最好使用以下任何一种方法 –

通用格式

 20150730 (=> the 30th of July in 2015) 

ODBC格式

 {d'2015-07-30'} or {t'23:30:59'} or {ts'2015-07-30 23:30:59'} 

ISO 8601

 '2015-07-30T00:00:00' 

我假设你收到的错误是:

从string转换date和/或时间时转换失败。

我可以看到您从您提供的数据中唯一的其他错误是FOREIGN KEY违规。 但是,正如您所指出的,第三个INSERT通过,第四个使用相同的外键ID,但似乎并非如此。

所以,你得到这个错误的原因是由于提供的DATEFORMAT没有处于预期的格式。

表示DATE的ANSI标准方式采用YYYY-MM-DD格式。 您提供的格式似乎在DD-MM-YYYY ,但会话的默认设置看起来像是预期MM-DD-YYYY ,这会导致在INSERT中解释以下date:

 Order_ID Order_Date -------------------------- 1 Feb 02 2015 2 May 08 2015 3 Jan 08 2015 4 (30th month?) 07 2015 ^- This is the part that's erring. 

由于您的意图似乎是DD-MM-YYYY ,您可以解决这两个方面:

  1. DATE格式更改为ANSI标准:

 Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (1, 'Design User Interface',9345678210123, 1, '2015-08-02'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (2, 'Fire',9654693261489, 1, '2015-08-05'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (3, 'The Odyssey',9654864332511, 2, '2015-08-01'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (4, 'Anatomy',9654877777755, 2, '2015-07-30'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (5, 'Surgery',9654864951753, 2, '2015-07-01'); 
  1. 更改交易的DATEFORMAT

 Set DateFormat dmy Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (1, 'Design User Interface',9345678210123, 1, '02-08-2015'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (2, 'Fire',9654693261489, 1, '05-08-2015'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (3, 'The Odyssey',9654864332511, 2, '01-08-2015'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (4, 'Anatomy',9654877777755, 2, '30-07-2015'); Insert Into #Orders(Order_ID, Book_name, isbn, Customer_ID, Order_date) values (5, 'Surgery',9654864951753, 2, '01-07-2015'); 

我个人会推荐第一个选项,因为在引用date的时候,这是一个更好的习惯。