6
votes

Champ DateTime à l'aide du temps militaire - Besoin de temps seulement en temps standard

J'ai un champ DateTime dans SQL Server 2008 qui stocke la date et l'heure au format militaire (ou au format international si vous préférez)

Exemples: p>

2011-02-15 10:00:00.000    needs to become 10:00 AM
2011-02-15 15:30:00.000    needs to become 3:30 PM
2011-02-15 17:30:00.000    needs to become 5:30 PM


4 commentaires

"Temps militaire" est un abus de questions - c'est la norme dans la vaste majorité des pays du monde - donc que devrait être appelé la norme, vraiment ...


@marc_s - et pourtant, ce n'est pas la manière dont ils sont stockés dans SQL Server ...


@Jamief: Oui, bien sûr - tu as absolument raison!


Quoi que vous préfériez appeler du temps militaire ou du temps international, c'est bien avec moi. Je suis simplement à la recherche d'un moyen efficace et efficace de prendre le champ DateTime et de récupérer la partie gentirotale au format américain.


3 Réponses :


1
votes

DateTime est stocké dans une représentation interne - il n'y a pas de format associé. Lorsque vous devez afficher la dateTime, spécifiez le formatage de votre choix pour convertir la dateTime en une chaîne.

C'est beaucoup mieux de laisser l'application décider de la mise en forme que la mise en forme en SQL.

voir standard et personnalisé Format de la date et de l'heure pour plus d'informations.


5 commentaires

Oui je comprends. Je cherche un code efficace pour convertir la date d'heure à l'autre uniquement au format U.S dans T-SQL.


@Matt - Vous devriez vraiment faire cela dans l'application.


J'aimerais bien. Mais ceci est pour un courrier programmatique fusionné dans un document Word dans lequel SQL Server renvoie les champs directement dans le champ Fusion de courrier électronique dans une application de niveau d'entreprise. Plus de 200 formes fonctionnent de cette manière et aucun code de fin d'extrémité est disponible dans cette situation.


@Matt - Vous ne pouvez pas formater la date retournée lors de la fusion du courrier?


Pas une option dans ce cas malheureusement. Le formatage du devant serait un morceau de gâteau. Mais malheureusement, j'ai besoin d'une solution T-SQL à cela. Je travaille sur une application de niveau d'entreprise qui possède une fabrique de mail de fusion en place dans laquelle tous les champs de fusion de messagerie planent directement sur des champs SQL Server et il n'y a jamais de code avant.



14
votes

Un moyen est le suivant:

Convertir en Varchar, qui vous donnera: P>

Select LTRIM(RIGHT(CONVERT(varchar, @dt, 100),7))


0 commentaires

1
votes

Comme vous l'avez demandé dans T-SQL, vous voudrez peut-être consulter le Cast and Convert Syntaxe qui répertorie spécifiquement divers formats de date et d'heure.

Par exemple:

Sélectionnez Convertir (varchar, getDate (), 100)

vous donnerait:

3 févr. 2012 15:26


2 commentaires

Oui, j'ai regardé cela et je ne trouve pas une solution jusqu'à présent.


Comme ODD a dit, cela devrait être fait dans le code de l'application, mais comme vous l'avez dit que ce n'est pas possible, je pense que la manipulation de chaîne est votre seul espoir (selon la réponse de KD7).