Sql 在数据库中接受英国日期格式

Sql 在数据库中接受英国日期格式,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在将有效的英国日期28/07/2014 10:53:46发送到我的数据库以插入。但是,下面的语句指出,将varchar数据类型转换为smalldatetime数据类型会导致值超出范围 INSERT INTO user_Log (Id,IP,DateTime) VALUES (6, '127.0.0.1', '28/07/2014 10:53:46'); 但是,如果我交换数据&如下面所示的月份部分,它就可以工作了。我应该在数据库中做什么更改以接受英国日期格式 INSERT INTO use

我正在将有效的英国日期
28/07/2014 10:53:46
发送到我的数据库以插入。但是,下面的语句指出,
将varchar数据类型转换为smalldatetime数据类型会导致值超出范围

INSERT INTO user_Log (Id,IP,DateTime) 
VALUES (6, '127.0.0.1', '28/07/2014 10:53:46');
但是,如果我交换数据&如下面所示的月份部分,它就可以工作了。我应该在数据库中做什么更改以接受英国日期格式

INSERT INTO user_Log (Id,IP,DateTime) 
VALUES (6, '127.0.0.1', '07/28/2014 10:53:46');

您可以尝试将语言设置为英国英语:

SET LANGUAGE 'british english'
或者将日期格式设置为dd/mm/yyyy

SET DATEFORMAT dmy;
我们也来看看这个:


您可以使用以下查询更改sql server中的默认日期格式:

SET DATEFORMAT mdy; 

您可以使用良好的ol'风格字符串操作来交换月份和日期:

declare @DATE_INPUT varchar(19); set @DATE_INPUT = '28/07/2014 10:53:46'

declare @US_DATE varchar(19)
set @US_DATE = SUBSTRING(@DATE_INPUT,4,2) + '/' + LEFT(@DATE_INPUT, 2) + RIGHT(@DATE_INPUT, 14)

INSERT INTO user_Log(Id,IP,DateTime)
VALUES(6, '127.0.0.1', @US_DATE);

您从哪里发送此查询?如果它来自其他语言的代码,请找到适当的方法来传递参数,并将其作为
datetime
传递。只有当您将此数据作为字符串处理时,才会出现格式问题。当您说要将日期发送到db时,您从何处发送?C#?是字符串还是日期时间?您的数据库设置为什么文化?美国/英国?如果(我不知道为什么)您确实需要将其作为字符串发送,请尝试使用ISO格式(YYYY-MM-DD)?@Damien_The_unsiver,它是由ASP应用程序生成的。如果我需要从应用程序中修改它,我需要在代码中的许多地方进行更改。但是,相同的代码正在处理存储在另一台计算机中的数据库。我猜有些默认的DB设置只接受US格式。我们如何使数据库只接受基于英国的格式?@Billa正是出于这个原因,您应该使用日期时间参数而不是字符串。但是,如果您无法更改代码,则需要将SQL区域性更改为UK-我认为您需要在安装时执行此操作,我不认为以后可以对其进行编辑。我强烈建议在向DB发送日期时开始使用iso日期,如YYYYMMDD。这样一来,语言环境设置就变得不可知了,将来也会像这样为您解决很多问题。这只会影响执行连接的日期格式选项。您的措辞可能会向OP建议,这是对整个数据库的永久性更改。此外,他们想要的是
dmy
格式,而不是
mdy
格式(而不是做正确的事情并修复调用代码以使用参数),这只会影响执行连接的日期格式选项。您的措辞可能会向OP建议,这是对整个数据库的永久性更改。