【问题标题】:Convert from text(char(50)) to datetime从 text(char(50)) 转换为日期时间
【发布时间】:2018-10-01 14:17:54
【问题描述】:

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

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

【问题讨论】:

  • 你能发布一些示例数据吗?
  • 如果您使用 错误 格式,这些转换都不会起作用。这些值是什么样的?是否有混合的 MM/DD 和 DD/MM 值?如果有,则无法使用单个命令转换文本。您必须以某种方式发现每个条目使用的格式
  • 请发表您的查询!我确定类型或声明有问题!
  • @Tito 没有理由假设类型或声明存在问题。 Arithmetic overflow error converting expression to data type datetime' 在这种情况下不会被抛出。 文本与格式不匹配的可能性更大
  • 我不希望在从 stringdatetime 的转换中出现错误(“'算术溢出错误将表达式转换为数据类型 datetime'”)我>。您可能会得到类似这样的信息:“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”

标签: sql tsql datetime


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    请看下面的模型:

    DECLARE @mydate INT =20181001
    
    
    SELECT CONVERT(DATETIME, CAST(@mydate as VARCHAR(20)), 103)
    

    【讨论】:

    • 我是对的。它已被存储为整数。这就是解决方案。先转换为 VARCHAR,然后再转换。
    • 我试过这个,现在我得到了超出范围值的错误,所以我要尝试解决这个问题......
    • 我认为我们非常接近。检查数据库日期格式。请参阅下面的另一个解决方案。您可能已设置数据库默认日期格式。验证所有日期都在“yyyymmdd”中。那里可能有一些奇怪的条目。
    • 工作中,会回来的
    • 我想我在我的数据集中找到了问题。他们有几种不同的方式将数据放入:20150117 还有:2015-01-17 有没有办法将这两种不同类型的 varchar 转换为日期?
    【解决方案3】:

    您需要检查语言设置的数据库隐含DATEFORMAT

    SET LANGUAGE us_english
    
    SELECT CAST('2018-02-25' AS datetime)
    
    SET LANGUAGE british
    
    SELECT CAST('2018-02-25' AS datetime)
    

    【讨论】:

      【解决方案4】:

      你的格式不对

      select convert(datetime, '20000113', 112)
      

      【讨论】:

        猜你喜欢
        • 2014-11-19
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多