在sql中将列数据从字符串格式更改为日期时间数据格式



关于如何在多行大型表中更改日期时间值的建议。

当前数据类型为字符串格式,如下所示:

23/03/2022 00:00:00
23/03/2022 00:00:00
23/03/2022 00:00:00
23/03/2022 00:00:00
23/03/2022 00:00:00
23/03/2022 00:00:00

我已经尝试转换

SELECT CONVERT(DATETIME2(7),[start_date] )
FROM 'table_name'

希望将其更改为日期时间格式,任何建议都非常感谢

在尝试直接更新列的数据类型时,为了避免潜在的数据丢失(或几乎肯定的失败),我的建议是:

  1. 添加新列:

    ALTER TABLE dbo.table_name
    ADD some_new_column datetime2(7) NULL;
    
  2. 尝试更新该列:

    UPDATE dbo.table_name 
    SET some_new_column = TRY_CONVERT(datetime2(7), 
    original_column, 103) -- important for d/m/y
    WHERE original_column IS NOT NULL;
    
  3. 确定原始值无法转换的任何行(并修复它们,取决于您发现的内容):

    SELECT original_column
    FROM dbo.table_name
    WHERE original_column IS NOT NULL
    AND some_new_column IS NULL;
    
  4. 一旦所有数据都固定了,删除原来的列,并将新列重命名为旧的名称:

    ALTER TABLE dbo.table_name DROP COLUMN original_column;
    EXEC sys.sp_rename N'dbo.table_namesome_new_column',
    N'original_column', N'COLUMN';
    
  • db&lt例子;在小提琴

对于将日期存储为字符串的任何列重复此过程(并且在将来确保从一开始就使用正确的数据类型)。更多阅读:

  • 要改掉的坏习惯:选择错误的数据类型
  • 数据类型选择的影响有多大?
  • 约会负责任地

相关内容

  • 没有找到相关文章

最新更新