2009-11-24 5 views
0

Je veux afficher l'heure de la date comme par exemple. 1 décembre 09 23:22:45 utilisant requête SQLobtenir le format d'heure de date personnalisée

Actuellement, mon format est:

DATENAME(Month, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) -599266080000000000)/864000000000) + SPACE(1) + DATENAME(d, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) +', ' + DATENAME(year, (((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000) /864000000000) + SPACE(1)+DATENAME (hour,(((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000)/864000000000) + ':' +DATENAME (minute,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) + ':' +DATENAME (second,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000)/864000000000) AS Expr2 

Ussing ci-dessus je reçois par exemple. 1 décembre 2009 23:22:45

J'essaie en utilisant la formata de cuatom de "mmm" et "yy" mais il ne fonctionne pas

suggestions ??? merci

Est-il impossible d'utiliser la propriété Datename ci-dessus pour obtenir le format souhaité?

+1

De quelle manière ASP.NET et C# sont-ils pertinents à cette question? Il semble que vous êtes uniquement intéressé par le côté SQL. D'un autre côté, y a-t-il une raison pour laquelle vous voulez que SQL fasse la mise en forme plutôt que de le faire dans votre code ASP.NET? –

+0

sommes-nous bien maintenant ... – user175084

+0

c'est parce que j'ai déjà fait le formatage ci-dessus à plusieurs endroits ... et maintenant il est juste nécessaire de le modifier un peu plus ... – user175084

Répondre

0

Il est beaucoup plus facile et plus efficace de renvoyer la valeur en tant qu'objet datetime générique et de la formater dans votre interface utilisateur.

Quelle est votre motivation pour renvoyer une date formatée de la base de données?

+0

J'ai déjà fait le formatage ci-dessus à beaucoup d'endroits ... et maintenant il est juste nécessaire de le modifier un peu plus ... merci bien – user175084

0

Cela vous mettra tout sauf AM/PM:

@myDate datetime déclare set @myDate = getdate() sélectionnez GAUCHE (DATENAME (MM, @myDate), 3) + '' + DROIT ('0' + DATENAME (DD, @myDate), 2) + ',' + DROIT (DATENAME (YY, @myDate), 2) + '' + convertir (varchar, (DATEPART (heure, @myDate))) + ':' + convertir (varchar, (DATEPART (minute, @myDate))) + ':' + convertir (varchar, (DATEPART (second, @myDate)))

Il existe plusieurs façons de réaliser les valeurs AM/PM, parmi eux serait une sous-chaîne de:

SELECT convert (varchar, getdate(), 109)

0

En plus MONTHNAME (que vous utilisez déjà), consultez DATEPART. Ce n'est pas loin non plus du format CONVERT de 9 [via CONVERT (VARCHAR(20), @datetime, 9)], donc vous pouvez manipuler cela aussi.

Une autre option est d'utiliser deux convertis ... cela vous donne ce que vous voulez, mais son temps en format 24h:

SELECT CONVERT(VARCHAR(20), @datetime, 107) + ' ' + CONVERT (VARCHAR(20), @datetime, 108) 

Utiliser une fonction de conversion différente et un peu de manipulation de chaîne pour vous obtenez 12 heure avec AM/PM. Ou faire quelque chose comme ceci:

SELECT CAST(DATEPART(hh, @datetime) - 12 AS VARCHAR) 
     + ':' + CAST(DATEPART(mi, @datetime) AS VARCHAR) 
     + ':' + CAST(DATEPART(ss, @datetime) AS VARCHAR) 
     + CASE WHEN DATEPART(hh, @datetime) BETWEEN 0 AND 11 THEN ' AM' ELSE ' PM' END 

Ni ceci ou la manipulation de la sortie de CONVERT est assez, mais ils sont vos meilleures options.

CEPENDANT: que d'autres ont fait remarquer que, ce qui est normalement mieux fait client/côté interface utilisateur plutôt que SQL côté.

0

Vous pouvez trouver tous les SQL Server pris en charge formats here.

Pour sélectionner dans un format équivalent à Dec 1, 09 11:22:45 PM, vous pouvez utiliser la date du format 7: Mon dd, yy. L'heure peut être assemblée à partir du format 109: mon dd yyyy hh:mi:ss:mmmAM (or PM).Combiné:

select 
    convert(varchar(10), getdate(), 7) + 
    ' ' + 
    stuff(
     substring(
      convert(varchar(32), getdate(), 109) 
     ,13,14) -- Substring HH:mi:ss.mmmAM 
    ,9,4,' ') -- Replace .mmm by one space 

Cela devrait imprimer:

Nov 24, 09 4:58:36 PM 

La seconde des deux espaces entre 09 et 4 est réservé pour deux heures numéro, comme 11:59:59 heures. :)

+0

est-il pas possible que je puisse utiliser Datename ????? – user175084

+0

@unknown: Je suppose que vous pourriez. Mais la requête avec convert est plus simple, alors pourquoi le ferais-tu? – Andomar