2010-05-06 5 views
1

J'ai un ancien système où tous les champs de date sont conservés au format AMJ. Exemple:Méthode optimale de conversion à ce jour

20101123 
this is date: 11/23/2010 

Je suis à la recherche du moyen le plus optimal pour convertir un champ de nombre en date.

Voici ce que je suis venu avec:

declare @ymd int 

set @ymd = 20101122 

select @ymd, convert(datetime, cast(@ymd as varchar(100)), 112) 

C'est assez bonne solution mais je suis errant si quelqu'un a une meilleure façon de le faire

+0

Optimal signifie déjà le plus.: p –

Répondre

4

essayez ceci:

CONVERT(DATETIME, CONVERT(NVARCHAR, YYYYMMDD)) 

Par exemple:

SELECT CONVERT(DATETIME, CONVERT(NVARCHAR, 20100401)) 

Résultats dans:

2010-04-01 00:00:00.000 
+0

Cela semble être plus efficace que le mien et cela semble aussi mieux. Merci! – IMHO

+1

pourquoi utiliser NVARCHAR? char (8) serait plus efficace. –

+0

twist intéressant - cela ne fonctionne pas comme Formule de champ calculé - des idées? – IMHO

2

Qu'est-ce que vous avez est une assez bonne soltuion.

Pourquoi cherchez-vous un meilleur moyen?

+0

Depuis que j'ai des meneaux de lignes à convertir - je cherche le moyen le plus rapide de le faire. Est-ce inhabituel? – IMHO

+0

@IMHO: La conversion de la partie date pour un million de lignes devrait coûter moins d'une seconde;) – Andomar

0

J'utilise exactement cela, il travaille très bien pour moi

0

Comme il est stocké sous forme d'entier, alors Vous pourriez extraire l'année, le mois et le jour en divisant par 100, 1000.

par exemple.

DECLARE @Date INT 
SET @Date = 20100401 

DECLARE @Year INT 
DECLARE @Month INT 
DECLARE @Day INT 

SET @Year = @Date/10000 
SET @Month = (@Date - (@Year * 10000))/100 
SET @Day = @Date - (@Year * 10000) - (@Month * 100) 

SELECT @Date, DATEADD(MONTH,((@Year-1900)*12)[email protected],@Day-1) 

Cependant, je ne sais pas si c'est plus rapide que la comparaison de chaînes que vous avez déjà. Je pense que votre solution est beaucoup plus propre et plus facile à lire et qu'elle s'en tiendra à cela.