如何在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
,您可以解决这两个方面:
- 将
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');
- 更改交易的
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的时候,这是一个更好的习惯。