web-dev-qa-db-fra.com

Comment convertir une chaîne en date de T-SQL?

Comment convertir une chaîne en date dans T-SQL?

Mon cas de test est la chaîne: '24.04.2012'

73
Nazar Tereshkovych
CONVERT(datetime, '24.04.2012', 104)

Devrait faire l'affaire. Voir ici pour plus d’informations: "CAST and CONVERT (Transact-SQL)"

118
Chris Roberts

Formats de date Microsoft SQL

CONVERT(DateTime, DateField, 104)
25

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:

14
MAbraham1

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.

8
Eric

Vous pouvez utiliser:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date

Référence: CAST et CONVERT (Transact-SQL)

3
Seann Alexander
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

fera ce qui est nécessaire, résultat:

2012-04-24 00:00:00.000
0
JMMS Karunarathne