关于如何在多行大型表中更改日期时间值的建议。
当前数据类型为字符串格式,如下所示:
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'
希望将其更改为日期时间格式,任何建议都非常感谢
在尝试直接更新列的数据类型时,为了避免潜在的数据丢失(或几乎肯定的失败),我的建议是:
-
添加新列:
ALTER TABLE dbo.table_name ADD some_new_column datetime2(7) NULL;
-
尝试更新该列:
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;
-
确定原始值无法转换的任何行(并修复它们,取决于您发现的内容):
SELECT original_column FROM dbo.table_name WHERE original_column IS NOT NULL AND some_new_column IS NULL;
-
一旦所有数据都固定了,删除原来的列,并将新列重命名为旧的名称:
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<例子;在小提琴
对于将日期存储为字符串的任何列重复此过程(并且在将来确保从一开始就使用正确的数据类型)。更多阅读:
- 要改掉的坏习惯:选择错误的数据类型
- 数据类型选择的影响有多大?
- 约会负责任地