繁体   English   中英

将结果集插入到临时表中时,在SQL Server中将nvarchar转换为Date失败

[英]Converting nvarchar to Date in SQL Server fails when inserting result set into staging table

我已经为此工作了几天,试图了解为什么我的插入失败。 我有一个表,每个记录中都有几个日期。 数据最初插入所有NVARCHAR的“着陆”表中。 在我的合并Upsert语句中,我正在将这些NVARCHARS转换为Date,并且产生了我所期望的格式,并且格式正确。 尝试将这些转换后的日期插入到暂存表中时,该结果集失败,该暂存表中日期字段的数据类型为DATES。

着陆台

CREATE TABLE [land].[MARA] (
[MATNR] nvarchar(18) NULL,
[ERSDA] nvarchar(12) NULL,
[LAEDA] nvarchar(12) NULL
ON [PRIMARY]
WITH (DATA_COMPRESSION = NONE);
GO
ALTER TABLE [land].[MARA] SET (LOCK_ESCALATION = TABLE);
GO

这就是登陆中存储数据的方式

matnr   ersda   laeda
841058  01.12.1998  23.06.2016
841630  01.12.1998  23.06.2016
842058  01.12.1998  01.06.2016
842085  08.12.1998  23.06.2016
842086  01.12.1998  23.06.2016

登台表

CREATE TABLE [stage].[MARA] (
[MATNR] nvarchar(18) NULL,
[ERSDA] date NULL,
[LAEDA] date NULL
ON [PRIMARY]
WITH (DATA_COMPRESSION = NONE);
GO
ALTER TABLE [stage].[MARA] SET (LOCK_ESCALATION = TABLE);
GO

选择声明

SELECT MATNR
  ,REPLACE(CONVERT(NVARCHAR, ERSDA,101), '.', '/') AS ERSDA
  ,REPLACE(CONVERT(NVARCHAR, LAEDA,101), '.', '/') AS LAEDA
FROM IBSCM01.land.MARA

执行上述SQL Select会产生格式化日期的结果集

MATNR   ERSDA   LAEDA
841058  01/12/1998  23/06/2016
841630  01/12/1998  23/06/2016
842058  01/12/1998  01/06/2016
842085  08/12/1998  23/06/2016

添加Insert子句会产生转换错误

INSERT INTO stage.mara
SELECT MATNR
  ,REPLACE(CONVERT(NVARCHAR, ERSDA,101), '.', '/') AS ERSDA
  ,REPLACE(CONVERT(NVARCHAR, LAEDA,101), '.', '/') AS LAEDA
FROM IBSCM01.land.MARA

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

在试图转换为日期的地方执行此选择也会引发相同的错误。

SELECT MATNR
  ,REPLACE(CONVERT(DATE, ERSDA,101), '.', '/') AS ERSDA
  ,REPLACE(CONVERT(DATE, LAEDA,101), '.', '/') AS LAEDA
FROM IBSCM01.land.MARA

我需要将NVARCHAR日期字段转换为插入到阶段表中的DATES,并且它们是正确的日期。 非常感谢任何见解。

您应该使用105 格式进行 convert ,因为dateformat是dd.mm.yyyy

SELECT MATNR
,CONVERT(DATE, ERSDA,105) AS ERSDA
,CONVERT(DATE, LAEDA,105) AS LAEDA
FROM IBSCM01.land.MARA

上面查询的结果可以直接插入到登台表中,因为ERSDA和LAEDA的数据类型为DATE

暂无
暂无

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

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