2017-09-27 8 views
1

J'essaie de résoudre un problème d'ingestion de données.Comment modifier les données comme insérées

Il existe une application qui collecte des données et recrache dans notre base de données, mais le problème est la date de collecte a été modifié sur le côté client pour être comme « DDD jjmmmaaaa »:

'Sat 20May2017' 

L'application n'est pas la nôtre, et nous n'avons pas accès à son code source. Je veux simplement supprimer la partie 'DDD' de la date avant son insertion, mais j'ai été incapable de le faire avec succès.

La colonne de table est définie comme:

SOURCE_DATE DATE NOT NULL 

Comme il est, les inserts échouent avec:

Échec de la conversion date et/ou le temps de chaîne de caractères.

Mais ils vont travailler avec le format 'jjmmmaaaa' (j'ai testé).

J'ai essayé de créer un déclencheur pour résoudre le problème, mais rien de ce que j'ai essayé n'a fonctionné. La dernière tentative:

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 

question subsidiaire: est-il un moyen de savoir quand/si un déclencheur a exécuté?

Toute aide serait grandement appréciée.

Répondre

0

je ne pas se sentir comme c'est le meilleur réponse, mais voici un façon:

J'ai créé un "go-between" table qui définit le champ de SOURCE_DATE à VARCHAR (13). Ensuite, mon déclencheur ou mes déclencheurs @Yogesh ou @rahul fonctionneront très bien. Le problème est que les contraintes de la table sont vérifiées à l'insertion et avant l'exécution du déclencheur.

+0

si les réponses ci-dessous sont utiles, puis acceptez ou votez pour la solution/réponse. –

+0

J'espérais que quelqu'un allait répondre avec une meilleure réponse. Je me sens comme le mien est juste une solution de contournement, pas une vraie solution. –

0

Si vous souhaitez supprimer le jour de la semaine comme sat, sun, mon, etc. de votre chaîne de date désirée, puis ci-dessous commande courte vous aidera.

DECLARE @DATE NVARCHAR(80); 

SET @DATE = 'Sat 20May2017' 

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

Sortie:

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

Son encore renvoyant une chaîne, convertir cela à ce jour – Wocugon

+0

j'ai donné la réponse selon "Mais ils fonctionneront avec le format" DDMMMYYYY "(j'ai testé cela)." –

+0

@Sobmac pas de problème, la date de la chaîne serait insérer dans le tableau que j'ai testé. –

0

Si vous souhaitez supprimer le jour de la semaine comme SAM., le soleil, mon, etc .. vous pouvez utiliser try_parsefunction

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