SQL - 从字符串转换日期 and/or 时间时转换失败
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;
我得到的错误是:
Conversion failed when converting date and/or time from character string.
请告诉我如何修复此错误。谢谢!
您可以先使用 try_convert()
更新值,然后更改列名。 注意:这会将任何无效值设置为 NULL
。
update customer
set dob = try_convert(date, dob);
alter table customer alter column dbo date;
如果你想看到错误的值,那么在你改变table之前,运行:
select c.*
from customer c
where try_convert(date, dob) is null and dob is not null;
您可能对如何修复这些值有其他想法。
您不能通过更改列来将 varchar 更改为 date 或 time 或 datetime。为什么?因为 SQL 服务器不知道该字段是否包含 '1/1/2020' 或 'My dog is cute'。您必须使用正确的数据类型重建 table,然后 CAST()
或 CONVERT()
将值重建为真实的日期时间。
在引擎盖下,这更有意义。 char/varchar 每个字符使用一个字节。 nchar/nvarchar 每个字符使用 2 个字节。日期时间是数字,而不是字符。这意味着您需要一个将其更改为正确数字的例程。如果要更深一点,这个数字是从公历0001年1月1日午夜开始的刻度数(纳秒)。 More info.
我正在处理的数据库中有 3 个表。在 3 个表中,有两个表具有包含日期的列。当我检查列的信息模式时,我发现日期的数据类型有误。如果您看到下图,突出显示的列应存储为 DATE
数据类型。
因此,我使用以下查询将其数据类型从 varchar
更改为 DATE
:
ALTER TABLE [dbo].[Customer]
ALTER COLUMN DOB DATE;
ALTER TABLE [dbo].[Transactions]
ALTER COLUMN tran_date DATE;
我得到的错误是:
Conversion failed when converting date and/or time from character string.
请告诉我如何修复此错误。谢谢!
您可以先使用 try_convert()
更新值,然后更改列名。 注意:这会将任何无效值设置为 NULL
。
update customer
set dob = try_convert(date, dob);
alter table customer alter column dbo date;
如果你想看到错误的值,那么在你改变table之前,运行:
select c.*
from customer c
where try_convert(date, dob) is null and dob is not null;
您可能对如何修复这些值有其他想法。
您不能通过更改列来将 varchar 更改为 date 或 time 或 datetime。为什么?因为 SQL 服务器不知道该字段是否包含 '1/1/2020' 或 'My dog is cute'。您必须使用正确的数据类型重建 table,然后 CAST()
或 CONVERT()
将值重建为真实的日期时间。
在引擎盖下,这更有意义。 char/varchar 每个字符使用一个字节。 nchar/nvarchar 每个字符使用 2 个字节。日期时间是数字,而不是字符。这意味着您需要一个将其更改为正确数字的例程。如果要更深一点,这个数字是从公历0001年1月1日午夜开始的刻度数(纳秒)。 More info.