【问题标题】:Change column data type from bigint to date in sql server在 sql server 中将列数据类型从 bigint 更改为 date
【发布时间】:2017-09-07 19:50:57
【问题描述】:

我正在尝试将列数据类型从 bigint 直接更改为日期类型,但显示错误:

"无法修改表。从数据类型 bigint 显式转换 迄今为止是不允许的。”

即使我尝试使用 alter query 进行更改,也再次出现此错误

“操作数类型冲突:bigint 与日期不兼容”。

请帮忙..

我尝试了什么:

ALTER TABLE emp_det1 ALTER COLUMN dob date

【问题讨论】:

  • 怎么改?你的意思是 CAST 还是 ALTER TABLE?向我们展示您的工作。
  • @jarlh alter table 这是我的查询:ALTER TABLE emp_det1 ALTER COLUMN dob date;
  • 添加一个新的日期列。执行 UPDATE 以复制现有的 bigint 日期并将其转换为新列。完成后,删除旧列。也许重命名新列。 (在执行此操作之前检查依赖项!外键、索引、触发器、视图等)
  • 您无法将 bigint 转换为日期。你必须先通过varchar。另外,这与 c# 有什么关系?
  • 您能否以 bigint 格式发布一些示例日期?

标签: c# sql sql-server types


【解决方案1】:

它出错是因为您的 bigint 列中包含无法显式转换为日期时间的数据。下面的代码测试了理论,并且会失败。在不插入数据的情况下再试一次,它会起作用。建议创建一个新的日期时间列并在转换时传输数据的帖子评论是您的最佳选择...假设您的 bigint 值确实可以完全转换为日期时间。

create table #test (MyCol bigint)

insert into #test (MyCol) values(3123456789)

alter table #test 
alter column MyCol datetime

【讨论】:

    【解决方案2】:

    由于错误消息表明您无法将 bigint 转换为日期。

    你需要做一些逻辑来转换它:

    例如,2016 年 4 月 10 日将存储为 4102016,而 2016 年 12 月 10 日将存储为 12102016。存在字符差异。

    我的建议是:

    • 备份数据,无论是我复制表还是进行备份。
    • 创建一个包含 pk 和 dob 的临时表。
    • 在临时表中添加一个 varchar 列并用 dob 填充它。 (chardate)
    • 将原表中的所有dob设置为null。
    • 将列上的数据类型更改为日期。
    • 使用正确的逻辑从临时表对原始表运行更新以转换日期。

    该逻辑会根据您的日期格式而有所不同,但对于美国 (mm/dd/yyyy) 看起来像这样:

    update emp_det1 
    set dob = case 
                 when len(chardate) = 8 
                    then convert(date,left(chardate,2)+'/'+substring(chardate,3,2)+'/'+right(chardate,4),101)  
                 when len(chardate) = 7 
                    then convert(date,'0'+left(chardate,1)+'/'+substring(chardate,2,2)+'/'+right(chardate,4),101)  
    from emp_det1 
        join #conv as conv 
           on emp_det1.pk = conv.pk 
    

    您可以将转换更改为 try_converts 以查找不合格的日期,我还建议在更新之前运行一些选择语句以确保数据在提交之前看起来正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多