Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2017中的默认日期格式_Sql Server_Sql Server 2017_Isodate - Fatal编程技术网

Sql server SQL Server 2017中的默认日期格式

Sql server SQL Server 2017中的默认日期格式,sql-server,sql-server-2017,isodate,Sql Server,Sql Server 2017,Isodate,我目前正在调试一个场景,其中需要从存储过程中的字符串读取日期 我们使用的代码是一个简单的convert语句。 e、 g 当我需要测试来自中文日期格式(yyyy.mm.dd,即ISO 102)的日期时,问题就出现了 必须设置Windows 10/SQL Server中的哪些设置,以便运行SELECT CONVERT(DATETIME,'2020.05.16')时不会返回 “将varchar数据类型转换为datetime数据类型导致值超出范围。” 我知道使用SELECT CONVERT(DATETI

我目前正在调试一个场景,其中需要从存储过程中的字符串读取日期

我们使用的代码是一个简单的convert语句。 e、 g

当我需要测试来自中文日期格式(yyyy.mm.dd,即ISO 102)的日期时,问题就出现了

必须设置Windows 10/SQL Server中的哪些设置,以便运行
SELECT CONVERT(DATETIME,'2020.05.16')
时不会返回 “将varchar数据类型转换为datetime数据类型导致值超出范围。”


我知道使用
SELECT CONVERT(DATETIME,'2020.05.16',102)
会起作用,但这会使通用存储过程在使用不同的windows日期格式运行时不正确

,同时更改我的windows设置以反映我也更改过的相同日期格式:

  • 在属性>高级>默认语言中我的SQLEXPRESS服务器的默认语言

  • 我的SQL用户登录属性的默认语言>常规>默认语言


这意味着它可以在不需要ISO 102标识符的情况下读取直接字符串值。

如果输入值的格式始终为
yyyy.MM.dd
,则使用适当的样式代码(不要依赖
登录的语言设置):

DECLARE@StringInput varchar(10)='2020.05.16';
选择CONVERT(datetime,@StringInput,102);

但是,理想情况下,不要将参数定义为
varchar
首先将其定义为
datetime
,并让应用程序传递正确的数据类型;不是一串。但对于您的应用程序所用的语言来说,这是一个不同的问题。

您的问题是将日期作为字符串参数传递,然后编写受可更改设置约束的代码。很简单-不要那样做。您的参数应定义为日期,并且调用代码应提供日期-可能这是一个应用程序。@SMor虽然我同意当前的应用程序方法不是最好的,但这些设置是由数据库管理员管理的,并且正是为了这个目的而设置的,而不是用户定义的可以更改的设置。它不是,然而,像OP在这里可能做的那样,提出一个有效的问题并提供一个有效的答案是非常受欢迎的,@SMor。鼓励询问和回答自己的问题。虽然我不确定这是否是一个答案。这是答案,因为我正在键入问题,我正在通过设置缩小问题范围,并找到了这些。我认为发布答案更有用,因为我无法在线找到答案。不幸的是,输入值并不总是相同的格式,根据用户的设置,如果环境设置正确,当前解决方案可以工作,我同意datetime输入是更好的解决方案,但我不是该应用程序的首席开发人员。“不幸的是,输入值并不总是相同的格式”,然后将后一条语句作为解决方案,@JaredWare。这就是你需要做的。否则,如果您无法从应用程序中获得一致的值,您将不知道字符串的值是什么。例如,“20-11-12”是什么意思?2012年11月20日?2020年11月12日?2012年20月11日?1912年11月20日?修复应用程序。
SELECT CONVERT(DATETIME, @dateInput)