【发布时间】:2016-09-14 09:46:40
【问题描述】:
我有一个相当奇怪的问题。我有一个日期字符串,部分是我自己创建的,用于合并一个变量。问题是,我正在设置另一种语言设置。在这种情况下,我还必须转换字符串以适应语言设置格式。我正在使用此代码:
cast(convert(varchar, cast(cast(getdate() as date) as varchar) + ' ' + RIGHT('0' + CAST(@HR as varchar), 2) + ':00:00.000', 120) as datetime)
我收到错误“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”如果您在转换前分配了错误的日期格式,这是正常的。
问题是,当我尝试转换个人创建的日期字符串时,无论我设置什么格式代码,它都不会改变它的格式。即使我硬编码一个数字而不是我的变量:
convert(varchar, cast(cast(getdate() as date) as varchar) + ' 0' + CAST(2 as varchar) + ':00:00.000', 101)
结果于 2016-09-14 02:00:00.000
例如,
convert(varchar, dateadd(Hour, 2, getdate()), 101) as datetime
2016 年 9 月 14 日的结果。
即使我有不同的语言设置,SQL Server 不应该总是识别标准格式的日期格式吗?
请给我一个建议,以便我可以克服这个问题。
提前致谢!
PS:我设法通过在设置保加利亚语之前在变量中插入转换后的日期时间列来解决我的问题。不过,我仍然很想知道导致问题的原因。
【问题讨论】:
-
使用
DBCC USEROPTIONS,您可以检查数据库使用的日期格式。如果以前从未设置过,它会在您更改语言时更改。但是,一旦您设置了像SET DATEFORMAT DMY这样的日期格式,如果您更改语言,日期格式将保持不变。有关这方面的更多信息,请参阅:msdn.microsoft.com/de-de/library/ms189491.aspx -
非常感谢。这将帮助我实现我的目标(我已经解决了),但仍然没有回答我的问题,这就是为什么转换为特定格式的数字不适用于我的字符串。
-
你是对的,这不是你问题的答案。但也许我的回答对这个问题更有帮助。都是因为
CONVERT里面的数据类型
标签: sql sql-server tsql date