Sql server SQL Server 2017中的默认日期格式
我目前正在调试一个场景,其中需要从存储过程中的字符串读取日期 我们使用的代码是一个简单的convert语句。 e、 g 当我需要测试来自中文日期格式(yyyy.mm.dd,即ISO 102)的日期时,问题就出现了 必须设置Windows 10/SQL Server中的哪些设置,以便运行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
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)