Comment convertir une chaîne en date dans T-SQL?
Mon cas de test est la chaîne: '24.04.2012'
CONVERT(datetime, '24.04.2012', 104)
Devrait faire l'affaire. Voir ici pour plus d’informations: "CAST and CONVERT (Transact-SQL)"
CONVERT(DateTime, DateField, 104)
Voici une solution qui fonctionne bien. L'instruction de base contient l'analyse en ligne try-parse:
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())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
Les colonnes ModifiedOn et ModifiedBy sont uniquement utilisées à des fins de suivi interne de la base de données.
Voir aussi ces références Microsoft MSDN:
Bien que la fonction CONVERT fonctionne, vous ne devriez en fait 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 ne les obtiendrez plus une fois, c'est correct, mais si une application l'utilise, vous devez modifier quelque chose. Le meilleur moyen serait d'utiliser le type de données "date". S'il s'agit d'une entrée d'utilisateur, c'est encore pire. Ensuite, vous devriez d’abord vérifier le client. Si vous voulez vraiment passer des valeurs de chaîne là où SQL-Server attend une date, vous pouvez toujours utiliser le format ISO ('AAAAMMJJ') et la conversion devrait en être automatique.
Vous pouvez utiliser:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Référence: CAST et CONVERT (Transact-SQL)
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
fera ce qui est nécessaire, résultat:
2012-04-24 00:00:00.000