使用 DATEADD 转换日期时转换失败

Conversion failed when converting date with DATEADD

我正在使用这个查询:

INSERT INTO Registro_EQ (Codigo, Fechtran, Fechaini, Fechaexp, IDCONF, Descripcion, Marca, Modelo, Serie, ConLista, Porcentaje_cl, SinLista, Porcentaje_sl, Movible,
            Porcentaje_mv, Edificio, Porcentaje_ed, Automatico, Exceso, Porcentaje_ex, Asignacion, Estatus, IDUsuario)
SELECT DATEADD(year, 1, Fechaini) as Fecha, DATEADD(year, 1, Fechaexp) as Fecha2,
       [Codigo] , [Fechtran], [IDCONF], [Descripcion], [Marca], [Modelo], [Serie], [ConLista], [Porcentaje_cl], [SinLista], [Porcentaje_sl], [Movible],
       [Porcentaje_mv], [Edificio], [Porcentaje_ed], [Automatico], [Exceso], [Porcentaje_ex], [Asignacion], [Estatus], [IDUsuario]
  FROM [Pru].[dbo].[Registro_EQ]
  WHERE Fechaini >= '2016-01-01' AND Fechaini < '2017-01-01'

当我 运行 向我发送以下消息时:

Conversion failed when converting date and/or time from character string.

我知道是日期时间,但我找不到答案。

您的问题最可能的原因是 Fechaini 存储为字符串而不是日期。这是错误的数据类型。您应该使用适当的 built-in 数据类型,除非您有充分的理由不这样做。

在 SQL Server 2012+ 中,您可以看到导致问题的值:

select Fechaini
from [Pru].[dbo].[Registro_EQ]
where try_convert(date, Fechaini) is null;

然后您应该修复您的数据。最好的方法是将数据更改为正确的类型(日期或日期时间类型)。

Insert Into 的顺序是 Codigo、Fechtran、Fechaini、Fechaexp、IDCONF,在 Select 中的顺序不同,Fecha、Fecha2、Codigo、Fechtran、IDCONF。

所以您很可能将数据插入了错误的列。

1st 在没有插入的情况下执行 select 查询,如果错误消失,那么您将错误的格式日期从 select 插入到您的目标 table

2 如果您从 select 查询中得到错误,您必须确保字段 "fechaini" 的格式是日期,如果不是,请确保包含的所有数据都是日期格式并且不应该包含空字符串。