En supposant que la base de données est MS SQL Server 2012 ou supérieur, voici une solution qui fonctionne. L'instruction de base contient le try-parse en ligne:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Voici ce que nous avons implémenté dans la version de production:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Les colonnes ModifiedOn et ModifiedBy sont uniquement destinées au suivi de la base de données interne.
Consultez également ces références Microsoft MSDN:
Bien que la chose CONVERT fonctionne, vous ne devriez pas l'utiliser. Vous devriez vous demander pourquoi vous analysez les valeurs de chaîne dans SQL-Server. S'il s'agit d'un travail ponctuel où vous corrigez manuellement certaines données, vous n'obtiendrez pas ces données une autre fois, c'est correct, mais si une application l'utilise, vous devez changer quelque chose. Le meilleur moyen serait d'utiliser le type de données "date". S'il s'agit d'une entrée utilisateur, c'est encore pire. Ensuite, vous devez d'abord procéder à l'enregistrement du client. Si vous voulez vraiment transmettre des valeurs de chaîne là où SQL-Server attend une date, vous pouvez toujours utiliser le format ISO ('YYYYMMDD') et il doit se convertir automatiquement.
la source
Vous pouvez utiliser:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Référence: CAST et CONVERT (Transact-SQL)
la source
fera ce qui est nécessaire, résultat:
la source