我正在尝试将文本列转换为日期时间。我已经尝试了几件事,但是我一直在出错。我到目前为止尝试过的步骤:
Convert(datetime, mydate, 103)
在我的系统中执行此查询后给出的错误: '将表达式转换为数据类型日期时间的算术溢出错误' 因此,我在互联网上进行搜索,找到了一些我尝试过的解决方案。
Convert(datetime, convert(char(8), mydate)
和
Cast(cast(mydate as char(8)) as datetime)
执行以下查询后出现的错误:“从字符串转换日期和/或时间时转换失败”,所以我搜索了更多可能的解决方案并尝试了此操作:
Convert(datetime, convert(char(8), mydate),103)
但是这仍然给我同样的错误。我现在真的用光了解决方案。你们当中有人知道如何解决此问题吗?
提前致意并感谢
以下是一些示例数据:
+----+------------+
| ID | MyDate |
+----+------------+
| 1 | 20170120 |
+----+------------+
| 2 | 19940101 |
+----+------------+
| 3 | 20001220 |
+----+------------+
| 4 | 20171101 |
+----+------------+
答案 0 :(得分:0)
问题很可能与格式有关。您是否有要转换为日期时间的字符串示例?
我建议您参考文档中的“ style”参数,以确保它与您要传递给CONVERT函数的字符串格式匹配。如果您可以提供示例字符串,则建议一个可行的示例会更容易。
答案 1 :(得分:0)
@miltenburger,我猜想@mydate已存储为整数。这就是为什么它引发错误: 讯息8115,第16级,州2,第4行 将表达式转换为数据类型为datetime的算术溢出错误
您需要做的是先将其转换为varchar,然后再转换为日期时间。
请参见下面的样机:
DECLARE @mydate INT =20181001
SELECT CONVERT(DATETIME, CAST(@mydate as VARCHAR(20)), 103)
答案 2 :(得分:0)
您需要检查按语言设置的数据库隐式DATEFORMAT
SET LANGUAGE us_english
SELECT CAST('2018-02-25' AS datetime)
SET LANGUAGE british
SELECT CAST('2018-02-25' AS datetime)
答案 3 :(得分:0)
格式错误
select convert(datetime, '20000113', 112)