2017-09-27 89 views
1

我正試圖解決數據攝取問題。如何修改插入的數據

有收集一些數據,它吐出到我們的數據庫的應用程序,但問題是它正在收集已被修改在客戶端要像「DDD DDMMMYYYY」日期:

'Sat 20May2017' 

該應用程序不是我們的,我們無法訪問它的源代碼。我想簡單地從插入之前的日期中刪除「DDD」部分,但是我一直無法成功完成此操作。

SOURCE_DATE DATE NOT NULL 

AS是,插入件會失敗:從字符串變換日期和/或時間時

轉換失敗

表列被定義。

但他們將與格式 'DDMMMYYYY'工作(我已經測試了這一點)。

我試圖創建觸發器來解決這個問題,但沒有我曾嘗試工作過。最近的一次嘗試:

CREATE TRIGGER T_FORMAT_DATE 
ON MY_TABLE 
INSTEAD OF INSERT AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO MY_TABLE(SOURCE_DATE) 
    SELECT RIGHT(SOURCE_DATE, LEN(SOURCE_DATE) - 4) 
    FROM inserted; 
END 

邊問題:有沒有辦法知道何時/如果觸發器已執行?

任何幫助將不勝感激。

回答

0

我做不覺得這是最好的答案,但這裏是一個方式

我創建了一個 「穿針引線」 表設置SOURCE_DATEVARCHAR(13)

然後,我觸發或@Yogesh或@rahul觸發器會工作得很好。問題是表約束觸發的執行之前檢查在插入

+0

如果下面的答案有用,則接受或投票解決方案/答案。 –

+0

我希望有人會以更好的答案作出迴應。我覺得我只是一個解決方法,而不是一個真正的解決方案。 –

0

如果你想從你期望的日期字符串中刪除一週的一天是星期六,星期日,星期一,等等。然後在下面簡短的命令會幫助你。

DECLARE @DATE NVARCHAR(80); 

SET @DATE = 'Sat 20May2017' 

select LTRIM(REPLACE(@DATE, SUBSTRING(@DATE, 1, 3), '')) DATE 

輸出:

+===========+ 
| DATE  | 
+===========+ 
| 20May2017 | 
+-----------+ 
+0

它仍然返回一個字符串,將其轉換成日期 – Wocugon

+0

我已經給出了答案,因爲每個「但是他們將與格式‘DDMMMYYYY’(我已經測試了這一點)的工作。」 –

+0

@Sobmac沒有問題,字符串日期將插入我已經過測試的表中。 –

0

如果你想刪除的一週每天都是星期六,星期日,星期一,等等。你可以使用try_parsefunction

DECLARE @DATE NVARCHAR(80); 
SET @DATE = 'Sat 20May2017'; 
SELECT Replace(CONVERT(VARCHAR(11), TRY_PARSE(@DATE AS DATE), 106), ' ', '');