从text(char(50))转换为日期时间

时间:2018-10-01 14:17:54

标签: sql tsql datetime

我正在尝试将文本列转换为日期时间。我已经尝试了几件事,但是我一直在出错。我到目前为止尝试过的步骤:

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  |
+----+------------+

4 个答案:

答案 0 :(得分:0)

问题很可能与格式有关。您是否有要转换为日期时间的字符串示例?

我建议您参考文档中的“ style”参数,以确保它与您要传递给CONVERT函数的字符串格式匹配。如果您可以提供示例字符串,则建议一个可行的示例会更容易。

https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

答案 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)