2011-05-10 5 views
1

y a-t-il une fonction pour convertir datetime en bigint en sql? E.g. J'ai une date "2010-11-02 00:00:00" et je voudrais obtenir le résultat sous le numéro "20101102000000"convertir datetime en bigint

Ou ai-je besoin d'écrire une fonction personnalisée qui supprimera -, espace ,: de datetime?

+0

Cela n'a pas vraiment de sens. Vous voulez dire que vous le voulez comme une chaîne. Formaté comme: "yyyyMMddHHmmss"? - Juste par intérêt, pourquoi avez-vous besoin d'un gros int? –

+0

@Lee Gunn - pas nécessairement, vous pourriez décider de stocker vos dates en tant que «entiers» et d'assumer le «format» du nombre, c'est-à-dire de façon à l'interpréter, pour être comme aaaaMMjjHHmmss. C'est le dernier à chiffres sont les secondes, les deux suivants sont les minutes, etc –

+0

mais une date est déjà un grand int ... c'est le nombre de ticks (ou autre) depuis l'époque. –

Répondre

3

vous pouvez essayer ce code ici ..

update Table_1 set xnew=REPLACE(REPLACE(REPLACE (CONVERT(VARCHAR,x,20) , '-' , ''),':',''),' ','') 

mais est double question, je répondais ici aussi: Sql datatype conversion

+1

Vous souhaitez que 120 soit le numéro de conversion pour l'année à quatre chiffres. Vous souhaitez également convertir le nombre entier en entier –

1

Vous ne pouvez pas convertir '2010-11-02 00:00:00'-20101102000000 en T-SQL directement si oui, comme vous dites, vous auriez besoin de modifier la chaîne en quelque chose que vous pouvez lancer comme bigint.

declare @str varchar(19) = '2010-11-02 00:00:00' 
select cast(replace(replace(replace(@str, '-', ''), ' ', ''), ':', '') as bigint) 
+0

Mais @Pramodtech commence par un 'DATETIME', pas une chaîne. Ce que vous avez ici fonctionnerait après la conversion de chaîne. – eksortso

+0

Ah bon point mes yeux juste sauté aux citations et j'ai assumé une chaîne –

0

Voici une solution:

declare @t datetime = '2010-11-02 00:00:00' 

select DATEPART(second, @t) + 
     DATEPART(minute, @t) * 100 + 
     DATEPART(hour, @t) * 10000 + 
     DATEPART(day, @t) * 1000000 + 
     DATEPART(month, @t) * 100000000 + 
     DATEPART(year, @t) * 10000000000 
0

La solution que j'utilise ces derniers temps (dans R2 SQL 2008) est:

cast(CONVERT(nvarchar(8),CURRENT_TIMESTAMP,112) as bigint) 

Le nombre de caractères dans la nvarchar limite la précision. J'ai seulement besoin de la date.