【问题标题】:Convert entire column from integer to datetime using SQL使用 SQL 将整列从整数转换为日期时间
【发布时间】:2020-02-17 15:51:49
【问题描述】:

我有一个包含整数的整列的表。我知道这些整数以前是日期时间值。我想将此列中的所有值更新为日期时间。有 1000 多行。我已将此列从 INT 更改为 varchar,因为我收到的所有错误都不喜欢我从 INT 转到 DATETIME,但我在 varchar 数据类型上遇到了同样的问题。

列中的示例值:43873、40706、43873 等

我尝试了以下查询:

UPDATE WORKER SET INT_TIME = DATEFROMPARTS(INT_TIME,1,1);

UPDATE WORKER SET INT_TIME = CONVERT(datetime,INT_TIME,107);

我收到类似的错误

从字符转换日期和/或时间时转换失败 字符串。

INT_TIME 是我尝试将所有值更新为日期时间的列:

【问题讨论】:

  • 您使用的是哪个 dbms? (当涉及到日期/时间时,许多产品远不符合 ANSI SQL。例如 DATEFROMPARTS 和 CONVERT 是特定于产品的。)
  • 我正在使用 Microsoft SQL Server Studio

标签: sql sql-server


【解决方案1】:

这些看起来像 Excel 格式。这表明类似:

select dateadd(day, col, '1899-12-30')

【讨论】:

  • 这里发生了什么?这不会更新列,是吗?
  • @WilliamStahl 。 . .不,但话又说回来,您有一个 INTEGER 列,因此如果您尝试将值设置为 DATE,您将失败。这会向您显示适当的转换。
【解决方案2】:
ALTER TABLE [dbo].[WORKER]
ALTER COLUMN [INT_TIME] DATETIME

此语句将整数列更改为日期时间列并自动解析值。

【讨论】:

    【解决方案3】:

    你可以使用dateadd()函数:

    select dateadd(day, t.int_time, 0) as joining_date
    from tabel t;
    

    您可以使用update 语句来更新,在此之前您还需要更改表定义:

    alter table worker
        alter column int_time DATETIME
    
    update worker
          set int_time = dateadd(day, t.int_time, 0)
    

    0 有一个默认日期1900-01-01 00:00:00.000

    【讨论】:

    • 这里发生了什么?这不会更新列,是吗?
    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2019-02-16
    相关资源
    最近更新 更多