簡體   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