IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Aide pour requête SQL conversion de date


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut Aide pour requête SQL conversion de date
    Salut,

    J'ai cette requête :
    select CONVERT(datetime, cast(20*1000000+11*10000+06*100+01 as varchar)) as jour

    qui me donne :

    2011-06-01 00:00:00.000

    Maintenant j'aimerais pouvoir ajouter l'heure pour avoir un truc du genre :

    2011-06-01 15:15:15.000

    On a retourné la requête dans tous les sens mais pas moyen d'y arriver.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 990
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 990
    Billets dans le blog
    6
    Par défaut
    Jamais vu pareille horreur (et encore je reste très poli !!!!), mais pour continuer dans ce merdier, faites donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(cast(20*1000000+11*10000+06*100+01 as varchar) AS datetime)  + (15*3600 + 15*60 + 15) / 86400.0
    Entre nous... A quoi ça vous sert ce truc immonde ?
    Votre intention est-elle de pourrir sciemment les performances de votre SGBDR ???

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut
    Merci

    C'est pas de moi mais ça va bien m'aider....

    A+

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut
    Une dernière question :

    Comment gérer cette requête lorsque l'heure est de ce format : Numérique de 6 du genre 151515 ?

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,


    Quel est le format d'origine des données, et quel format voulez vous en sortie, ce sera plus simple.

    Éventuellement, précisez aussi un peu le besoin/contexte, on pourra surement trouver une meilleure solution.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut
    Salut,

    Voici :

    Le contexte : Création d'une vue.

    En gros je possède les zones suivantes dans un fichier :

    -Siècle ==> Numérique 2.0
    -Année ==> Numérique 2.0
    -Mois ==> Numérique 2.0
    -Jours ==> Numérique 2.0
    -Heure ==> Numérique 6.0


    Je souhaite avec ces zones créer une vue dont la zone de la vue sera au format datetime

    Exemple :

    -Siècle ==> 20
    -Année ==> 11
    -Mois ==> 01
    -Jours ==> 01
    -Heure ==> 150115

    Résultat souhaité ==> 2011-01-01 15:01:15.000

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 990
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 990
    Billets dans le blog
    6
    Par défaut
    Un fichier ne contient que des caractères, même si certains expriment des quantité numériques. Intégrez votre fichier dans une table (par exemple T) dont les colonnes sont :
    • S pour Siècle (2 caractères)
    • A pour Année (2 caractères)
    • M pour Mois (2 caractères)
    • J pour Jours (2 caractères)
    • H pour Heure (6 caractères)

    Voici la requête qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST(S + A + M + J + ' ' + SUBSTRING(H, 1, 2) + ':' + SUBSTRING(H, 3, 2) + ':' + SUBSTRING(H, 5, 2) AS DATETIME)
    FROM T
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut
    Je me suis mal exprimé dsl, mes zones sont déjà dans une table sous la forme numérique.

    -Siècle ==> MVSVAM ==> Numérique 2.0
    -Année ==> MVAVAM ==> Numérique 2.0
    -Mois ==> MVMVAM ==> Numérique 2.0
    -Jours ==> MVJVAM ==> Numérique 2.0
    -Heure ==> MVHVAM ==> Numérique 6.0

    Ci-dessous la requête adapté :

    Select CAST(MVSVAM + MVAVAM + MVMVAM + MVJVAM + ' ' + SUBSTRING(MVHVAM, 1, 2) + ':' + SUBSTRING(MVHVAM, 3, 2) + ':' + SUBSTRING(MVHVAM, 5, 2) AS DATETIME)
    from reflex.HLMVAEP


    Cependant l'éxecution me retourne l'erreur suivante :

    Msg 8116, Level 16, State 1, Line 1
    Argument data type numeric is invalid for argument 1 of substring function.


    Merci pour votre aide.

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    vous pouvez essayer ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    SELECT 
    	DATEADD(
    		SECOND,
    		MVHVAM - ROUND(MVHVAM, -2),
    		DATEADD(
    			MINUTE,
    			(ROUND(MVHVAM, -2, 1) - ROUND(MVHVAM, -4, 1))  / 100,
    			DATEADD(
    				HOUR,
    				MVHVAM / 10000,	
    				DATEADD(
    					DAY,
    					MVJVAM - 1,
    					DATEADD(
    						MONTH,
    						MVMVAM - 1,
    						DATEADD(
    							YEAR,
    							(MVSVAM - 19) * 100 + MVAVAM,
    							'1900-01-01'
    						)
    					)
    				)
    			)
    		)
    	)
    FROM LaTable

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Par défaut
    C'est résolu.
    Merci pour vos aides.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour requête SQL
    Par 0x0000091 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/01/2009, 15h50
  2. Aide pour requête SQL
    Par eatherquake dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/12/2008, 14h44
  3. Aide pour requête SQL assez simple
    Par Pilloutou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 28/03/2008, 15h07
  4. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 18h20
  5. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 08/06/2006, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo