Partager
Affiche les résultats de 1 à 14 sur 14

Sujet : SQL Server Meet The T-SQL Buddy

  1. #1
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Lightbulb SQL Server Meet The T-SQL Buddy

    Welcome You Weak Persons


    Excellent ,
    Je vais essayé ( j'ai bien dis essayé ) de faire des cours autour du monde merveilleux des DBMS , je ne vais pas reprendre les bases et le principe de fonctionnement de SQL-Server mais je vais crée des jeux !!oui oui vous avez bien lu ce n'est pas un lag ou chute de tension ( Ahh ya SONELGAZ ....SONATMESKHIR ) .
    C'est vrai que le but de Microsoft n'été pas de crée une Xbox orienté DB mais c'est une méthode assez intéressant d'apprendre et de connaitre les différents fonctions proposé par SQL-Server.....Let's Get Started :

    Le but du jeux :
    On veut crée un jeux qui retourne le nombre de voyelles dans un mot ( Mot = HERE donc 2 voyelles => E,E).

    Les Problèmes : ( ghir houma )
    1 - Comment retourné chaque lettre du mot en question et par la suite faire un test si la lettre et une voyelle ou pas ? , si oui un compteur que l'ont va crée va s'incrémenter tous seul comme un grand ( bonne famille hada )
    2 - Comment faire avancer le buffer pour parcourir le mot en question ? et ou s'arreter ?

    Les Solutions :
    1 - On peut utiliser la fonction SUBSTRING (ParamOne , ParamTwo , ParamThree)
    Explication :
    Cette fonction ( Built-in Function) réservé de SQL-Server accepte trois paramètres :
    1 - ParamOne : La variable hébergeant la valeur a parcourir (dans notre cas la variable du mot )
    2 - ParamTwo : L'index par lequel on commence a parcourir la variable ( ParamOne )
    3 - ParamThree : Le pas d'incrémentation
    2 - Pour arrêter le buffer on utilise la fonction LEN qui accepte en paramètre la variable hébergeant la valeur a parcourir (dans notre cas la variable du mot ) et pour l’arrêter on utilise une boucle While ( While Loop )

    Damn j'ai rien compris a ce que je viens de lire
    Réponse : Excellent car je vais éxpliquer avec l’algorithme en question :

    * On aura besoin d'une procedure pour ce jeux ( procedure ou fonction c'est la meme chose pour ce cas en tous cas )

    PS : je programme en anglais désolé c'est une habitude que j'ai .
    Encore une fois si vous êtes novices passer votre chemin y a rien a voir ici .




    Code:
    Not Available
    Le resultat doit être 3 ( car trois voyelles 'E','O','O' )

    A venir Le Scrabble version SQL SERVER
    Dernière édition par TeamWorK; 01/01/2013 à 01h47

  2. Les membres suivants ont remercié TeamWorK pour cet excellent message :


  3. # ADS
    Inscrit
    Toujours
    Lieu
    Monde des annonces
    Messages
    Plusieurs






     
  4. #2
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Re : SQL Server Meet The T-SQL Buddy

    Halo Welt Scrabble


    PS:
    Moi j'utilise la version 2012 de sql server ( SQL SERVER Developper Edition 2012 ) , mais libre a vous d'utiliser d'autre DBMS tel que Access ou Oracle ou SQLight ou autres et même la version gratuite de sql Server qui est : SQL SERVER EXPRESS EDITION .

    Le but du jeux :
    On veut crée un scrabble .... voila quoi y a rien a expliquer .....
    Bon , on aura 2 joueurs Gambler1 et Gambler2 ( Nselemou 3lihome ) chacun va donner un mot et doit être semblable au mot caché ( qui va être générer par nos soin ) depuis une table qu'on nommera Dictionary et une table Score qui contiendra le score de chacun des joueurs .

    De quoi a t_besoin ?

    1 - Une table Dictionary : cette dernière contiendra les mots valide a utiliser , donc cela dépendra de vous , plus le dictionnaire et gros ( en matière de mots ) plus le jeux sera plus intéressant , la raison est de façon a contrôler les mots proposé par les joueurs pour ne pas tomber sur des mots tel que "7RRIRA" d'une part et aussi de proposé le fameux mot caché ( générer par nos soin ) .
    Voici sa structure :
    Code:
    CREATE TABLE Dictionary
    (
     Word VARCHAR(10) 
    )
    * car difficile de trouver des mots de plus de 20 lettres .


    2 -Une table Score: Cette dernière contiendra le score pour chaque joueur, pour faciliter les choses on va omettre les deux champs : FirstLetter , SecondLetter qui devront contenir la première lettre et la seconde du mot proposé précédemment .
    Voici sa structure :
    Code:
    CREATE TABLE Score
    (
     FirstGamer INT ,
     SecondGamer INT ,
     FirstLetter CHAR(1), -- A enlever
     SecondLetter CHAR(1), -- A enlever 
     CONSTRAINT CK_Score_FirstGamer CHECK (FirstGamer>=0 ),
     CONSTRAINT CK_Score_SecondGamer CHECK (SecondGamer>=0 ),
    )
    Une table Letter : Cette dernière contiendra les lettre de l'alphabet pondérer par leur poids ( point pour chaque lettre )
    Voici sa structure :
    Code:
    CREATE TABLE Lettre
    (
     CharLettre CHAR(1),
     [Weight] INT,
     CONSTRAINT CK_Lettre_Weight CHECK ([Weight]>0)
    )
    * Pour le rendre plus intéressant incluez des lettres spéciale depuis d'autre langues , même chose pour le dictionnaire ( Table Dicitionary )
    Exemple :
    A = 2,
    B = 1,
    C=3,
    ...etc ( soyez logique avec les poids car on donnent plus aux lettres rarement utilisé )

    Application :
    On utilisera une procédure ou une fonction pour ma part ca sera une procédure nommé "SP_GuessTheWord" qui aura comme paramètre le mot proposé ainsi que l'ID du joueurs
    Exemple : SP_GuessTheWord 2 , 'AWESOME' ( chez moi ca donne 20 points pour le joueurs2 ( Gambler2 , 1 pour Gambler1 et 2 pour Gambler2 ( ce qui est logique .....pffff encore raté )))



    Let's Get In Deep :
    Code:
    Not Available
    Remarque :
    Le mien n'est pas aussi simple que ca ( bein oui quoi ) j'ai utilisé des variables qui obligent les users a utiliser la première lettre et la dernière du mot proposé précédent le mot courant .

    Voila espérant que sa vous a intéresser et que vous avez un peu compris l'idée

    A Venir LE MOT PALINDROME
    Dernière édition par TeamWorK; 01/01/2013 à 01h49
    Not Available

  5. #3
    Inscrit
    February 2011
    Lieu
    alger
    Messages
    1 772
    Remerciements
    778
    Remercié(e) 810 fois dans 485 messages
    Pouvoir de réputation
    16

    Re : SQL Server Meet The T-SQL Buddy

    RAISERROR ('No Match',1,16) --1,16 sont les paramétrés de gravité
    c'est pas bien de ce moquer ntweswes dit au moins que c'est des paramètre de message d'erreur enfin c'est ton taf

    j'aime bien l’aspect humoristique du tuto a part peut être les allusion en arabe je sais pas si ils sont approprié

    les concept sont basique bien pour les novices

    moi aussi j'ai penser a faire un tuto introuvable les raquettes select imbriquer dans le moteur de recherche wordpress en mysql pour filtrer les résultat j'ai trouvé la raquette dans un site japonais donc a part un miracle ça devrais pas exister je les utiliser pour la conception http://www.navigoo.net/ mais j'ai peur que les gens ne comprenne pas


    Visitez mon blog habibal.tk en ligne



    et aussi habibal-tv.tk en ligne


    chaine youtube : https://www.youtube.com/user/omhabibal

  6. #4
    Inscrit
    June 2011
    Messages
    345
    Remerciements
    1
    Remercié(e) 251 fois dans 150 messages
    Pouvoir de réputation
    9

    Re : SQL Server Meet The T-SQL Buddy

    Citation Envoyé par habibal Voir le message
    moi aussi j'ai penser a faire un tuto introuvable les raquettes select imbriquer dans le moteur de recherche wordpress en mysql pour filtrer les résultat j'ai trouvé la raquette dans un site japonais donc a part un miracle ça devrais pas exister je les utiliser pour la conception http://www.navigoo.net/ mais j'ai peur que les gens ne comprenne pas
    Cela dépend de ce que tu veux dire par requête imbriquées pour le champ de recherche. L'architecture des tables MySQL n'est pas bien complexe.
    Site personnel : www.blueicefield.com

  7. #5
    Inscrit
    February 2011
    Lieu
    alger
    Messages
    1 772
    Remerciements
    778
    Remercié(e) 810 fois dans 485 messages
    Pouvoir de réputation
    16

    Re : SQL Server Meet The T-SQL Buddy

    Code:
    where ( ID IN ( SELECT meta.post_id FROM meta WHERE ( meta.meta_key = 'cp_type' AND meta.meta_value = 'offres' ) ) OR ID IN ( SELECT meta.post_id FROM meta WHERE ( meta.meta_key = 'cp_type' AND meta.meta_value = 'demandes' ) ))
    ça c'est juste une partie je t'es pas mit toute la requête avec l'algo qui va avec parce que la requête est générer dynamiquement d’apprêt les catégorie et les limites de chaque champ et crois moi elle est maousse costaud

    le problème c'est que dans mysql y a pas FULL JOIN, inner ce comporte de façon hasardeuse d'ailleurs j'ai pas compris pourquoi j'ai bien planté a l’époque
    Dernière édition par habibal; 19/06/2012 à 16h24


    Visitez mon blog habibal.tk en ligne



    et aussi habibal-tv.tk en ligne


    chaine youtube : https://www.youtube.com/user/omhabibal

  8. #6
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Re : SQL Server Meet The T-SQL Buddy

    alors alors ,

    Enfet c'est bien des paramètres de gravité du message (sévérité) :
    Code:
    RAISERROR ('No Match',1,16)
    le "1" étant l’état et le "16" la sévérité

    Exemple :
    une sévérité entre 11 et 19 passe directe au bloc CATCH (TRY...CATCH) ce qui est intéressant pour les triggers et transactions .....blabla bref

    Les requêtes imbriqués :
    ce n'est pas le fait de l'écrire qui est difficile mais leur exécution .... dans un cadre professionnel l'optimisation d’exécution est de rigueur ( qui nous emmène dans un cours passionnant => je ferais un tuto dessus )

    Exemple :
    On a une DB d'un aéroport et on veut :
    Le pilote ayant le même salaire que le pilote qui a effectué le moins de vols sur les appareils de capacité 300.

    Question:
    What the hell ?

    Réponse :
    Take it easy duda !!

    Analyse:
    On veut le pilote ayant le même salaire => on s'en fou de tous mais on a une requête qui cible la table "Pilote" avec un "Pilote_Id IN" . Pourquoi "IN" parce que la première requête retournera plus d'un tuple ( donc un ensemble de données ) ....

    Question:
    Arrête tes conneries , on peut aussi bien utiliser "LIKE" .

    Réponse :
    éhhoohh un peu de sérieux .... "LIKE" retournera trop de tuples qui auront presque le même salaire (Pilote_Salary) : 12000,00 et 12000,02 c'est la même chose , alors que non ( bein quoi ca fais une différence )

    Il faut ensuite faire une comparaison pour "effectué le moins de vols " avec "<= ALL" et une clause "HAVING COUNT(*)" pour le "Pilote_ID" et on inclue la condition "les appareils de capacité 300"
    "WHERE Plane.Plane_Capacity > 300"

    Solution :
    Code:
    SELECT Pilote.Pilote_Id , Pilote.Pilote_Name , Pilote.Pilote_Family_Name
    FROM Pilote
    WHERE Pilote.Pilote_Salary IN (
                                SELECT Pilote.Pilote_Salary
                                FROM SetFlight , Flight , Plane , Pilote
                                WHERE SetFlight.Flight_Id = Flight.Flight_Id AND
                                Flight.Plane_Id = Plane.Plane_Id AND 
                                SetFlight.Pilote_Id = Pilote.Pilote_Id AND
                                Plane.Plane_Capacity > 300
                                GROUP BY Pilote.Pilote_Salary
                                HAVING COUNT (Pilote.Pilote_Id) <= ALL (
                                           SELECT COUNT(SetFlight.Pilote_Id)
                                           FROM SetFlight , Flight , Plane , Pilote
                                           WHERE SetFlight.Flight_Id = Flight.Flight_Id AND
                                           Flight.Plane_Id = Plane.Plane_Id AND 
                                           SetFlight.Pilote_Id = Pilote.Pilote_Id AND
                                           Plane.Plane_Capacity > 300
                                           GROUP BY Pilote.Pilote_Salary
                                )
                   )
    PS:
    Ce n'est pas une requête imbriqué que tu A présenté mais une "recherche conditionnée a choix "OR" "
    bon la dernière et j’arrête :
    Essaye de respecter les conventions d’écriture des langages de programmation ( Web / DB / Sys)
    Exemple :
    Le "CamelCase" pour Javascript , jQuery , SQL Server , Oracle , MySql...etc
    Le ""Under Score " pour PHP , ASP .....etc
    Dernière édition par TeamWorK; 24/06/2012 à 15h22
    Not Available

  9. #7
    Inscrit
    February 2011
    Lieu
    alger
    Messages
    1 772
    Remerciements
    778
    Remercié(e) 810 fois dans 485 messages
    Pouvoir de réputation
    16

    Re : SQL Server Meet The T-SQL Buddy

    nfet c'est bien des paramètres de gravité du message (sévérité) :
    dsl je retire ce que j'ai dit sévérité c'est plus explicite quand même

    Le "CamelCase" pour Javascript , jQuery , SQL Server , Oracle , MySql...etc
    dsl le cms est écrit de cette manière j y peut rien demande au type qui la fait moi j'ai juste modifier et j'ai pas mit le nom de la table exacte

    Ce n'est pas une requête imbriqué que tu A présenté mais une "recherche conditionnée a choix "OR" "
    j'ai bien précisé que je n'est pas mit toute la requête y a or mais a la base c'est imbriquer

    Code:
    SELECT blabla FROM blabla  WHERE ID IN ( ( requête )or( requête ) )
    Citation Envoyé par mysql.com
    Une sous-requête est une commande SELECT dans une autre commande. Par exemple :

    SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

    La requête externe (ou commande externe), et (SELECT column1 FROM t2) est la sous-requête. Nous disons que la sous-requête est imbriquée dans la requête externe, et en fait, il est possible d'imbriquer des requêtes dans des sous-requêtes, avec d'autres commandes. Une sous-requête doit toujours être entre parenthèses.
    si ça c'est pas imbriqué alors oui ta raison
    Dernière édition par habibal; 20/06/2012 à 08h47


    Visitez mon blog habibal.tk en ligne



    et aussi habibal-tv.tk en ligne


    chaine youtube : https://www.youtube.com/user/omhabibal

  10. #8
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Re : SQL Server Meet The T-SQL Buddy

    EXACTE ....

    Mais comme tu n'avais pas présenté toute la requête donc voila ( cela explique ceux avec eux .......blabla )

    Code:
    SELECT blabla FROM blabla  WHERE ID IN ( ( requête )or( requête ) )
    " blabla " est un nom de table ( vue ou autre ) assez intéressant ( rien a foutre ... a partir de maintenant je vais l'utiliser => CopyRights tu me diras )
    Dernière édition par TeamWorK; 20/06/2012 à 12h21
    Not Available

  11. #9
    Inscrit
    February 2011
    Lieu
    alger
    Messages
    1 772
    Remerciements
    778
    Remercié(e) 810 fois dans 485 messages
    Pouvoir de réputation
    16

    Re : SQL Server Meet The T-SQL Buddy

    Mais comme tu n'avais pas présenté toute la requête donc voila ( cela explique ceux avec eux .......blabla )
    poooooof t'es pénible
    c'est schématique tu remplace blabla par toto si tu veux ou foo bar ou baz ou n’importe quel variable metasyntaxique ne sois pas trop rigide

    PS : franchement je connaissais pas l’opérateur ALL jamais utilisé j'ai du l'apprendre et oublier aussi tôt


    Visitez mon blog habibal.tk en ligne



    et aussi habibal-tv.tk en ligne


    chaine youtube : https://www.youtube.com/user/omhabibal

  12. #10
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Re : SQL Server Meet The T-SQL Buddy

    Remarque :
    On va s’arrêter un petit moment avec les jeux ( trop de jeux tu le jeux.... blague pourris mais c'est tous ce que j'ai ).
    En plus je suis de bonne humeur aujourd'hui (Suède 2 - 0 France)=> IBRAHIMOVITC ( de bab el oued .... bein quoi y a IBRAHIM dans son nom )

    PS:
    Vous auriez vu le but ( LES LOIS DE LA PHYSIQUE ON ÉTÉ BAFOUÉES )


    Les requêtes imbriquées :
    Remarque : ( trop de remarque je sais )
    J'utilise les DB de Microsoft : AdventureWorksLT2008 et autres


    Let's Get in there folks :
    Supposons que je veuille afficher les détails d'un table ( enregistrements ) qui est une requête simple comme euhhh ..... DEVENIR PRÉSIDENT ( c'est limite mais encore une fois c'est tous ce que j'ai ) , on procède comme ceci :

    Code:
    SELECT *
    FROM AdventureWorksLT2008.SalesLT.SalesOrderHeader
    Et on veut avoir le client avec le plus grand montant ( MAX TOTALDUE ) , deux choic s'offre a nous :

    Code:
    SELECT MAX(TotalDue)
    FROM AdventureWorksLT2008.SalesLT.SalesOrderHeader
    -- Ou bien 
    SELECT *
    FROM AdventureWorksLT2008.SalesLT.SalesOrderHeader
    ORDER BY SalesLT.SalesOrderHeader.TotalDue DESC
    La première requête étant la plus optimiser ( Execution Plan pour les utilisateurs de SQL Server )

    Analyse :
    La première requête retourne un seul tuple qui est le max alors que la seconde fais un tri ce qui n'est pas très ergonomique si on veut que celui qui a le plus grand "TotalDue"
    Donc une modification s'impose pour afficher seulement un seul tuple , en utilisant la clause "TOP" ce qui donne le résultat suivant en MySQL c'est en utilisant "LIMIT")
    Code:
    SELECT  TOP 1 *
    FROM AdventureWorksLT2008.SalesLT.SalesOrderHeader
    ORDER BY SalesLT.SalesOrderHeader.TotalDue DESC
    Problème :
    voulant connaître le client qui a ce montant ( le nom et prénom du client ayant le plus grand "TotalDue") est chose impossible pour la simple raison qu'il est identifier par son ID (CustomerID) :
    Code:
    SELECT SalesLT.SalesOrderHeader.CustomerID
    FROM SalesLT.SalesOrderHeader
    ORDER BY SalesLT.SalesOrderHeader.TotalDue DESC
    Solution :
    On aura besoin de faire un "JOIN" ou une imbrication de requête

    Méthode "JOIN" :
    Code:
    SELECT TOP 1 a.CustomerID , b.CompanyName , b.LastName
    FROM SalesLT.SalesOrderHeader a INNER JOIN SalesLT.Customer b
    ON a.CustomerID = b.CustomerID
    ORDER BY TotalDue DESC
    Méthode "Imbrication de requête" :
    Code:
    SELECT SalesLT.Customer.FirstName , SalesLT.Customer.LastName
    FROM SalesLT.Customer -- depuis la table Customer car je veut des info dispo dans cette table 
    WHERE Customer.CustomerID =(
    SELECT TOP 1 CustomerID -- La SubQuery va s’exécuter en premier pour venir satisfaire les info  
                                               demander par la premier requête 
    FROM SalesLT.SalesOrderHeader
    ORDER BY TotalDue DESC)
    Execution Plan :
    La requête imbriquer est plus gourmande en ressource ( temps d’exécution ) que la méthode "INNER JOIN" cependant , cette dernière n'est pas vraiment clair n’empêche qu'elle fonctionne .
    Cela dis la méthode de l'imbrication est clair et suit une logique humaine bien clair .

    Les deux méthodes peuvent être soumise a un choix de programmation ( j'utilise JOIN plus que les SUBQUERIES ..... c'est un choix) , mais parfois utiliser un "JOIN" est plus difficile ( voir impossible ) que d'utiliser une requête imbriquée ( SUBQUERY )

    Question :
    Voyez-vous ca , et quand ca ?
    Réponse :
    Supposons qu'on veuille cette fois-ci retourner les clients qui n'ont jamais effectué de commandes .

    Solution :
    Code:
    SELECT SalesLT.Customer.FirstName , SalesLT.Customer.LastName
    FROM SalesLT.Customer 
    WHERE CustomerID NOT IN (
    SELECT DISTINCT CustomerID
    FROM SalesLT.SalesOrderHeader
    )
    Explication :
    "NOT IN" a été ajouté pour retourner un ensemble qui est précédé par une négation "NOT".
    Autre chose , "DISTINCT" a été ajouté pour éviter les doublons ( bein oui un seul TeamWorK suffit amplement )

    Remarque :
    "Super alors j'ai tous compris ..."
    "Oui et non" car ce type de requêtes est très délicat surtout quand on a affaire a des tables comportant plusieurs milliers et plus d'enregistrement ( On scan a travers ces tables ) l'optimisation de vos requête et leur temps d’exécution joue un rôle probant ( primordial ) , ce qui nous emmène vers un autre cours celui de :" Optimisation des requêtes "
    Dernière édition par TeamWorK; 24/06/2012 à 13h52
    Not Available

  13. #11
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Re : SQL Server Meet The T-SQL Buddy

    C'est repartis avec nos jeux .

    Comme promis nous allons continuer avec le fameux "MOT PALINDROME" .

    Le Mot Palindrome


    Explication :
    Mot ou groupe de mot que l'on peut lire dans les deux sens .

    le 7 mars 1936, de l'écrivain français Georges Perec. Membre de l'Oulipo, un groupe international de littéraires et mathématiciens, il est l'auteur, avec « La Disparition », d'un roman de 300 pages sans utiliser la lettre « e ». Distingué par un prix Renaudot et un prix Médicis, il était également cruciverbiste, et est l'auteur d'un palindrome de 1 247 mots. Il est décédé à Ivry-sur-Seine, le 3 mars 1982.

    Logique de programmation :
    Ce qu'on doit faire c'est testé chaque lettre du mot en question pour voir si la lettre courante et égale a la lettre d'index opposé .

    Pour comprendre un peu , on va utiliser la logique de la recherche dichotomique ; on prend la longueur du mot et en le divise par 2 pour trouver le milieu ce qui donne : LEN(@Word)/2 , une fois l'index du milieu retourné , on pourras depuis cette indexe avancer vers la fin et vers le début pour comparer les lettres .

    Pour ce faire on utilisera deux variables Start et End :
    - Start : devra s'incrémenter pour atteindre le début du mot .
    - End : logiquement , devra se décrémenter pour atteindre la fin .
    on aura besoin d'autre variables qui seront expliquer directement avec le code qui va suivre , parmi ces variables on créera un Flag qui permet de savoir si le mot précédemment parcouru est palindrome ou pas , moi j'utilise un flag binaire ( appellation qui n'existe pas mais bon on se comprends .... fin j’espère )mais libre a vous d'utiliser un flag booléen ( même chose pour l’existence de cette appellation ) .
    Si Oui alors la variable résultat sera afficher ( cette dernière contient une chaîne string par défaut qui est : "Yes" ou "No" ) .

    Assez parler passons au choses sérieuse :
    Code:
    Not Available
    Remarque :
    Si vous avez compris le principe alors le fait de tester des Phrases Palindrome devrait être chose facile , seul chose qui change c'est les Espaces Blanc .

    Bon aller amuser vous avec quelques mots :Palindrome

    A Venir la Procédure LeapYear
    Dernière édition par TeamWorK; 01/01/2013 à 01h50
    Not Available

  14. #12
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Lightbulb Re : SQL Server Meet The T-SQL Buddy

    Leap Year


    Remarque :
    C'est très pratique d'avoir un code qui s'éxécute automatiquement sur une action bien définis c'est ce qu'on appels des Triggers ( un autre cours sera reservé a ce sujet) .

    Dans notre cours d'aujourd'hui on va crée une procédure qui nous retournera si l'année passée en paramètre est une date bissextile ou pas

    Analyse :
    Procédure simple qu'on va nommé "UDP_LeapYear" , donc on aura besoin de lui passé un parametre pour la date en question , de préférence de type DATETIME2 ( pour plus de précision ) .
    Alors , il faut savoir que pour qu'une date soit bissextile , elle doit etre "divisible par 4,100 et non divisible par 400" ( mais ca vous le savez déjà )

    Problème :
    1 -Comment peut on retourné l'année depuis une date ?
    2 -Comment peut on savoir si un chiffre est divisible par un autre ?
    Solution :
    1 -Sachez que notre chère Micorboulon euhh je veux dire Microsoft a pré-programmé pour nous des fonctions bien utile telle que : YEAR() ( qui accepte en paramètre une date bien précise et qui retournera l'année) .
    2 -"Les Maths les maths......" , bref un nombre est complètement divisible par un autre si le reste de la division ....... bein y aura pas de reste et pour se faire en utilisera l’opérateur " Modulo = %" qui représente le reste d'une division .

    Exemple :
    On veut diviser 4 par 2 .
    On sait très bien que le résultat sera 0 ( pour des raisons que vous connaissez ) , mais si on veux faire un test d'un maniere a afficher un message disons :'Divisible' si le reste est 0 .
    Solution :
    IF (4 % 2 = 0)
    BEGIN
    PRINT 'Divisible'
    END
    Suggestion :
    Pour retourné l'année depuis une date , on peut utiliser la fonction SUBSTRING()
    Réponse :
    Biensur que oui , mais l'utilisateur est une entité bizarroïde qui a tendance a passer outre les règles de gestion , c'est pour cette raison qu'on utilise le type DATETIME2 pour que cette entité passe un format de date correct ( celui de la date ) .
    Avec la fonction SUBSTRING() , on se complique la tache a deviner si l'année a été formaté de façon abrégée ou étendue
    Exemple :
    12/12/12 ou 12/12/2012

    Yosh , Let's Get In

    Code:
    Not Available
    A Venir La Procedure Qui Compte Les Mots d'un Texte
    Dernière édition par TeamWorK; 01/01/2013 à 01h50
    Not Available

  15. #13
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Lightbulb Re: SQL Server Meet The T-SQL Buddy

    Et c'est repartis de plus belle , bon même excuse professionnel pour l'absence mais bon on va continuer avec nos cours autour du T-SQL ainsi que d'autre cours qui ont été préparé autour du C# et Python , mais bon je ne promet rien .

    La Procedure Qui Compte Les Mots d'un Texte


    Remarque :
    Je me suis laisser aller a sur le code pour créer cette procédure du coup ma version final fait dans les 100 lignes vu que j'ai tous géré comme caractères possible .

    Question :
    Gérer quoi ?

    Réponse :
    Excellente question et pour y répondre passons a la pratique .

    L'idée de cette procédure :
    Alors il faut savoir que cette procédure doit être capable de lire une phrase passé en paramètre et de retourné le nombre de mots existant au sein de cette phrase .

    La logique utilisé :
    Il faut savoir que pour compter le nombre de mots , on utilise la fonction de la mort, j'ai nommé SUBSTRING() .
    On initialise une variable avec cette fonction et on la fait avancer grâce a une boucle while avec une condition que @i qui doit être initialiser a 1 soit inférieur a la longueur de la phrase passé en paramètre qui peut etre reourné par a fonction LEN() .

    Question :
    Quoi ? que es ce que c'est que cette explication foireuse ?

    Réponse :
    Et bien il faut juste revoir les précédant tutoriels pour comprendre le fonctionnement de SUBSTRING() et de LEN() ainsi que la logique suivis pour faire avancer le buffer .

    Problème :
    1 - Comment sait-on que le mot est terminé ?

    Solution :
    Tous simplement on testant le caractère après le mot déjà testé , si ce dernier est un espace blanc donc le mot et terminé et on incrémente un compteur qui est une variable initialisé a 0 et qui s'incrémente a chaque fois qu'un blanc est détecté .

    Problème :
    2 - Et si le caractère qui suit est encore un blanc ?

    Solution :
    C'est ce qu'on appelle une question pertinente ( je sais pas qui pose ces questions mais la personne a l'air intéressante ) .
    Bref il suffit alors d'effectué un autre test avec cette fois ci une boucle While et comme condition on trouvera la longeur de la phrase passé en paramètre , bein quoi faut pas l'oubié hein et biensur que le buffer soit égale a un espace blanc .

    Remarque :
    Ca peut être un peux silly mais bon le code va tous expliqué .


    Not Available
    A Venir : La fonction qui fait la conversion des chiffres en lettres
    Dernière édition par TeamWorK; 01/01/2013 à 01h51
    Not Available

  16. Les membres suivants ont remercié TeamWorK pour cet excellent message :


  17. #14
    Inscrit
    June 2012
    Lieu
    Not Available
    Messages
    537
    Remerciements
    15
    Remercié(e) 188 fois dans 140 messages
    Pouvoir de réputation
    8

    Arrow Re: SQL Server Meet The T-SQL Buddy

    La fonction qui fait la conversion des chiffres en lettres


    Nous y voila , pour notre prochain cours autour des merveilles du T-SQL sous SQL-SERVER , et pour une première fois je vais utilisé une fonction et non une procédure a l'instar des autres cours .

    L'idée de la fonction :
    Cette fonction va acceptée en paramètre un chiffre pour retourner ensuite la conversion en lettre de ce total , il faut dire que c'est une fonction très utile pour les softs de comptabilité ou finance ou autres domaines bien définis .

    La logique :
    La fonction doit être capable de décortiquer le chiffre , numéro par numéro pour en trouver la correspondance en lettre .

    Problèmes : (ça faisais longtemps )
    1 - Comment va-t on décortiquer le chiffre ?.
    2 - Comment va-t on procéder pour trouver la correspondance en lettres ?.
    3 - Sur combien de position doit-on coder ?

    Solutions :
    1 - Le probleme ne se pose pas puisque la fonction SUBSTRING() est la pour aider.
    2 - Tous simplement on créant une table portant deux champs :
    a - Number : ce champ sera résponsable d'héberger le plus possible de numéro .
    b - CharNumber : ce champ hébergera la correspondance pour chaque numéro .
    Bien alors créons la table que l'on appellera Numbers qui est inluse dans une base de donnée nommé ConvertMe

    Remarque :
    Ça peut sembler bizarre et même incompréhensible de me voir écrire sous la création d'une DB , cependant dans ce cour on ne va pas créé une simple fonction ou procédure sans pour autant utilisé une base car on interagissais qu'avec l'utilisateur (souvenez vous , paramètres )

    On y va :
    Code:
    Not Available
    Voila , ce qui nous amène a la fin de ces cours sur quelques fonctions et procédures introuvables sur le 3W , bref le prochain cour s'il y aura un autre sera une surprise ( même pour moi tiens )

    Espérons que ça vous a aider et que mes explications ont étaient claire .
    Dernière édition par TeamWorK; 01/01/2013 à 01h51
    Not Available

Sujets similaires

  1. server ccam all package
    Par sharingserver dans le forum Ventes
    Réponses: 2
    Dernier message: 28/05/2014, 20h44
  2. [Vente] server cccam sur vps au prix de 500 da ou 5 euro
    Par salim970 dans le forum Ventes
    Réponses: 4
    Dernier message: 24/12/2012, 16h05
  3. [Vente] server ppv a la carte
    Par adelppv dans le forum Ventes
    Réponses: 8
    Dernier message: 23/12/2012, 08h00
  4. server ccam all package
    Par sharingserver dans le forum Ventes
    Réponses: 0
    Dernier message: 24/06/2012, 18h46
  5. Server Cccam Full Hd
    Par sofiane2110 dans le forum Ventes
    Réponses: 2
    Dernier message: 16/01/2012, 14h28

Tags pour ce sujet

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas modifier vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé



Liens annexes