Sql 从文本(字符(50))转换为日期时间

Sql 从文本(字符(50))转换为日期时间,sql,tsql,datetime,Sql,Tsql,Datetime,我正在尝试将文本列转换为日期时间。我试过几种方法,但总是出错。到目前为止,我尝试了以下步骤: Convert(datetime, mydate, 103) 在我的系统中执行此查询后出现的错误: '将表达式转换为数据类型datetime时发生算术溢出错误' 所以我在互联网上搜索,找到了几种我尝试过的解决方案 Convert(datetime, convert(char(8), mydate) 及 执行这些查询后它给我的错误是:“从字符串转换日期和/或时间时转换失败”,因此我搜索了更多可能的解决

我正在尝试将文本列转换为日期时间。我试过几种方法,但总是出错。到目前为止,我尝试了以下步骤:

Convert(datetime, mydate, 103)
在我的系统中执行此查询后出现的错误: '将表达式转换为数据类型datetime时发生算术溢出错误' 所以我在互联网上搜索,找到了几种我尝试过的解决方案

Convert(datetime, convert(char(8), mydate)

执行这些查询后它给我的错误是:“从字符串转换日期和/或时间时转换失败”,因此我搜索了更多可能的解决方案并尝试了以下方法:

Convert(datetime, convert(char(8), mydate),103)
但这仍然给了我同样的错误。我现在真的没有办法了。你们当中有人知道怎么解决这个问题吗

致以亲切的问候和感谢

以下是一些示例数据:

+----+------------+
| ID |   MyDate   |
+----+------------+
| 1  |  20170120  |
+----+------------+
| 2  |  19940101  |
+----+------------+
| 3  |  20001220  |
+----+------------+
| 4  |  20171101  |
+----+------------+

问题可能与格式有关。您是否有要转换为datetime的字符串的示例

我建议在文档中引用“style”参数,以确保它与传递到CONVERT函数中的字符串格式匹配。如果您可以提供一个示例字符串,那么建议一个工作示例就更容易了


@miltenburger,我猜@mydate已存储为整数。这就是它抛出错误的原因: Msg 8115,16级,状态2,第4行 将表达式转换为数据类型datetime时出现算术溢出错误

您需要做的是先将其转换为varchar,然后再转换为datetime

请参见下面的模型:

DECLARE @mydate INT =20181001


SELECT CONVERT(DATETIME, CAST(@mydate as VARCHAR(20)), 103)

您需要检查语言设置的数据库隐含日期格式

SET LANGUAGE us_english

SELECT CAST('2018-02-25' AS datetime)

SET LANGUAGE british

SELECT CAST('2018-02-25' AS datetime)

你的格式不对

select convert(datetime, '20000113', 112)

你能发布一些示例数据吗?如果你使用了错误的格式,这些转换都不起作用。这些值是什么样的?是否存在混合的MM/DD和DD/MM值?如果存在,则无法使用单个命令转换文本。你必须找出每个条目使用的格式。请发布你的查询!我确定类型或声明有问题@Tito没有理由假设类型或声明存在问题<代码>算术溢出错误将表达式转换为数据类型datetime'在这种情况下不会被抛出。更可能的情况是文本与格式不匹配。我不希望在从字符串到日期时间的转换中出现错误(“将表达式转换为数据类型datetime时出现算术溢出错误”)。您可能会得到这样的结果:“将varchar数据类型转换为datetime数据类型导致值超出范围。”我是对的。它已存储为整数。这就是解决办法。先将其转换为VARCHAR,然后再转换。我已经尝试了这个,现在我得到了超出范围的值错误,所以我将尝试解决这个问题……我想我们已经非常接近了。检查数据库日期格式。请参阅下面的另一个解决方案。您可能已经设置了数据库的默认日期格式。确认所有日期均为“yyyymmdd”。可能有一些奇怪的条目在里面。处理它,会回来的。我想我在我的数据集中发现了问题。有几种不同的方式将数据输入:20150117,但也有:2015-01-17有没有办法将这两种不同类型的varchar转换为日期?
select convert(datetime, '20000113', 112)