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

Développement SQL Server Discussion :

Transact-SQL problème CAST Time


Sujet :

Développement SQL Server

  1. #1
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut Transact-SQL problème CAST Time
    Bonjour,

    Je travaille avec un SQL Server 2005 Express et la requête suivante ne fonctionne pas. Pourtant, la doc me semble claire ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(CAST(Duration AS time(7))) AS Duration FROM Test
    Résultat : Le type time n'est pas un type défini par le système. !!!

    Merci d'avance de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Attention à la version de SQL Server dont vous lisez la documentation : C'est écrit tout en haut, SQL Server 2008
    En conséquence vous ne pouvez pas utiliser le type TIME sous SQL Server 2005 Express, et je vous redirige donc vers la version 2008 de SQL Server, qui est aussi en édition Express.

    @++

  3. #3
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Ah c'est donc ça... Merci !

    Et comment je pourrais traiter mon problème en MSSQL Server 2005 ??

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Quel est le type de la colonne duration ?
    Avez-vous vraiment besoin d'une précision à 100 ns ?

    @++

  5. #5
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Le type est VARCHAR. Par contre, les données sont toutes dans le même format, à savoir HH:MM:SS. Je me rends compte que j'aurais eu meilleur temps de traiter mes données avant l'insertion en DB...

    Une précision à la seconde est suffisante...

    Merci pour les réponses

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Dans ce cas je vous conseille plutôt d'écrire une fonction, qui vous restituera le nombre de secondes que représente votre heure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE FUNCTION udf_GetSecondsFromTime (@heure CHAR(8))
    	RETURNS INT
    	WITH SCHEMABINDING
    AS
    BEGIN
    	SELECT CAST(LEFT(@heure, CHARINDEX(':', @heure) - 1) AS TINYINT) * 3600 + -- Heures
    			CAST(SUBSTRING(@heure, CHARINDEX(':', @heure, CHARINDEX(':', @heure)) + 1, 2) AS TINYINT) * 60 + -- Minutes
    			CAST(RIGHT(@heure, 2) AS TINYINT) -- secondes
    END
    Vous pouvez ensuite stocker celui-ci directement au niveau de votre table par une colonne calculée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE maTable
    ADD secondsFromDuration AS(dbo.udf_GetSecondsFromTime(duration)) PERSISTED NOT NULL
    Cela vous permet d'effectuer ensuite l'opération suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEADD(second, -secondsFromDuration, uneDateDeTypeDATETIME)
    Et vous avez la possibilité d'indexer cette colonne calculée

    @++

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Jette un oeil à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select convert(varchar, getdate(), 108)
    L'extrapolation à ton problème devient facile.
    Most Valued Pas mvp

  8. #8
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Merci pour toutes ces réponses.

    J'ai utilisé la solution du CONVERT. Beaucoup plus simple, et surtout que ce n'est pas une requête qui sera effectuée souvent (~10x/jour).

    Problème résolu !

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

Discussions similaires

  1. TRANSACT-SQL Problème d'addition
    Par dsr57 dans le forum Développement
    Réponses: 3
    Dernier message: 03/10/2008, 15h53
  2. [transact SQL] problème d'ORDER BY
    Par thelpi dans le forum Langage SQL
    Réponses: 10
    Dernier message: 03/09/2008, 15h10
  3. [Transact-SQL] Problème avec "execute" dans un "if"
    Par dj_lil dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/12/2007, 15h56
  4. [Transact SQL] Problème recherche
    Par Escrow974 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/09/2007, 14h56
  5. problème Transact SQL
    Par elderion dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/03/2006, 10h09

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