繁体   English   中英

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

[英]SQL - Conversion failed when converting date and/or time from character string

我正在处理的数据库中有 3 个表。 在 3 个表中,有两个表的列包含日期。 当我检查列的信息架构时,我发现日期的数据类型错误。 如果您看到下图,突出显示的列应存储为DATE数据类型。

在此处输入图像描述

因此,我使用以下查询将其数据类型从varchar更改为DATE

ALTER TABLE [dbo].[Customer]
ALTER COLUMN DOB DATE;

ALTER TABLE [dbo].[Transactions]
ALTER COLUMN tran_date DATE;

我得到的错误是:

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

请让我知道如何解决此错误。 谢谢!

您可以做的是首先使用try_convert()更新值,然后更改列名。 注意:这会将任何无效值设置为NULL

update customer
    set dob = try_convert(date, dob);

alter table customer alter column dbo date;

如果您想查看错误值,那么在更改表之前,请运行:

select c.*
from customer c
where try_convert(date, dob) is null and dob is not null;

您可能对如何修复这些值有其他想法。

您不能通过更改列从 varchar 更改为日期或时间或日期时间。 为什么? 因为 SQL 服务器不知道该字段是否包含“2020 年 1 月 1 日”或“我的狗很可爱”。 您必须使用正确的数据类型重建表,然后将值CAST()CONVERT()重建为真实的日期时间。

在引擎盖下,这更有意义。 char/varchar 每个字符使用一个字节。 nchar/nvarchar 每个字符使用 2 个字节。 日期时间是一个数字,而不是一个字符。 这意味着您需要一个将其更改为正确数字的例程。 如果您想更深入,该数字是自公历 0001 年 1 月 1 日午夜以来的滴答数(纳秒)。 更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM