【问题标题】:How Can I use "Date" Datatype in sql server?如何在 sql server 中使用“日期”数据类型?
【发布时间】:2015-12-14 20:01:16
【问题描述】:

您好朋友,我需要您的帮助,当我尝试在数据类型为“日期”的表中创建列时,它给了我错误,我无法在此处添加它是我的代码

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,
);

我需要另一件事来获取创建之前的日期

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

我尝试输入这样的数据

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 个插入,最后两个它给我错误:/

【问题讨论】:

  • 去掉Order_date date后面的逗号
  • @Siyual 谢谢请检查我的更新问题
  • 它给你的错误是什么?
  • 你应该试试yyyy-mm-dd 格式
  • 嗨,艾哈迈德,您对 SO 并不陌生,但请允许我一些提示:1) 不要问后续问题。 2)不要写“给我错误”,而是告诉我们你得到的错误。 3) 说明你的 SQL Server 的版本!

标签: sql sql-server database datetime format


【解决方案1】:

“最后两个”没有问题。

但是,您确实对所有这些都有问题,但一个接一个。

文字日期取决于您系统的文化

您的日期被解释为 MM-DD-YYYY。这种解释取决于您系统的文化。前三个变成了错误的日期,但有效。第 4 次中断,第 5 次从未执行(由于之前的错误)。

所以实际的错误在第 4 行。

每当您处理日期时,请使用与文化无关的格式。最好使用以下任何一种-

通用格式

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'

【讨论】:

  • @Shungo 我的意思是,当我插入前三个时它已经工作了,但之后没有任何工作,我遵循这种格式“yyyy-MM--dd”它成功了!感谢您的贡献:-)
  • 谢谢你,我给你最好的答案^_^
【解决方案2】:

我假设您收到的错误是:

从字符串转换日期和/或时间时转换失败。

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

因此,您收到此错误的原因是提供的 DATEFORMAT 不是预期的格式。

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

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'); 

我个人会推荐第一个选项,因为在引用日期时要养成更好的习惯。

【讨论】:

  • 感谢您的努力 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 2013-09-09
  • 1970-01-01
  • 2014-10-20
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多