2016-05-26 1 views
2

J'utilise SQL Server 2016 et je stocke json. Lorsque je l'extrait, le format datetime ne s'affiche pas propre. Comment formater le format datetime?Comment mettre en forme la date dans TSql lorsque j'utilise json_value

select 
    JSON_VALUE(trade, '$.entrytime') AS entrytime 
from 
    dbo.Trades 

Les valeurs indiquées:

2016-05-23T05:21:30.3068919-04:00 
2016-05-24T10:49:16.337257-04:00 
2016-05-24T11:05:30.8941267-04:00 
2016-05-24T11:37:35.9555731-04:00 

Comment formater ces dates dans le format yyyy-mm-dd hh:mm:ss?

+0

Enregistrez votre date/heure mise en forme pour votre couche application/présentation, ne le faites pas dans la requête. Le format que vous obtenez est "propre" - c'est la norme ISO 8601. – alroc

+0

J'essaie de le réparer dans ma couche de présentation. Je cours une requête pour voir les données et je veux le voir correctement formaté afin que je puisse l'analyser. Alors, comment formater la date pour le voir correctement – junkone

Répondre

1

Vous pouvez également utiliser FORMAT:

select FORMAT(CAST(JSON_VALUE(trade, '$.entrytime') as datetimeoffset), 'yyyy-MM-dd hh:mm:ss') AS entrytime from dbo.Trades 
+0

Je reçois un message 241, niveau 16, état 1, ligne 10 La conversion a échoué lors de la conversion de la date et/ou de l'heure de la chaîne de caractères. – junkone

+0

Agrr ... oublié le fuseau horaire. Affirmez-le à 'datetimeoffset' au lieu de' datetime'. –

+0

puisque cela en fait un objet datetime, je préfère cette solution mieux que l'autre. Cependant, pour une raison étrange, le serveur sql semble prendre quelques secondes de plus pour le traiter, même si je n'ai que 25 enregistrements json – junkone

0

Vous voulez formater l'horodatage suivant pour ressembler à celui qui le suit:

2016-05-24T11:37:35.9555731-04:00 
2016-05-24 11:37:35 

La requête suivante remplace le T avec un espace, et aussi sous-chaînes de tout ce qui vient après (et y compris) la période .

SELECT REPLACE(SUBSTRING(JSON_VALUE(trade, '$.entrytime'), 1, 
         CHARINDEX('.', JSON_VALUE(trade, '$.entrytime')) - 1), 
       'T', ' ') AS entrytime 
FROM dbo.Trades 
+0

Je n'ai pas d'espace entre la date et l'heure. comment puis-je le corriger? 2016-05-2305: 21: 30 – junkone

+1

Désolé, j'ai utilisé une chaîne vide au lieu de l'espace. Essayez à nouveau, cela devrait fonctionner maintenant. –