Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Κόψιμο τόνων από Varchar στήλη

Îåêßíçóå áðü ôï ìÝëïò vtops. Τελευταία δημοσίευση από το μέλος vtops στις 10-07-2007, 11:51. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-07-2007, 10:46 33489

    Κόψιμο τόνων από Varchar στήλη

    Καλημέρα σε όλους,

    Προσπαθώ να φτιάξω μια συνάρτηση σε SQL SERVER 2000 η οποία θα παίρνει μια ελληνική λέξη και θα επιστρέφει την ίδια λέξη χωρίς τους τόνους.

    Σύνταξα λοιπόν διαδοχικές replace με  όλα τα φωνήεντα της Ελληνικής αλφαβήτα για τα μικρά και τα κεφαλαία.

    CREATE Function dbo.F_CutGreekTones(@STR  varchar(8000) )
    RETURNS VARCHAR(8000)
    AS
    BEGIN
      
     -- Για τα μικρά τονισμένα
     SET @STR=REPLACE(@STR,'ά','α')
     SET @STR=REPLACE(@STR,'έ','ε')
     SET @STR=REPLACE(@STR,'ή','η')
     SET @STR=REPLACE(@STR,'ί','ι')
     SET @STR=REPLACE(@STR,'ό','ο')
     SET @STR=REPLACE(@STR,'ύ','υ')
     SET @STR=REPLACE(@STR,'ώ','ω')

     -- Για τα Κεφαλαία τονισμένα
     SET @STR=REPLACE(@STR,'Ά','Α')
     SET @STR=REPLACE(@STR,'Έ','Ε')
     SET @STR=REPLACE(@STR,'Ή','Η')
     SET @STR=REPLACE(@STR,'Ί','Ι')
     SET @STR=REPLACE(@STR,'Ό','Ο')
     SET @STR=REPLACE(@STR,'Ύ','Υ')
     SET @STR=REPLACE(@STR,'Ώ','Ω')

     return @str
    END

    Το πρόβλημα λοιπόν με την παραπάνω Function είναι πως αν έρθει μια λέξη η οποία τονίζεται για παράδειγμα ένα κεφαλαίο γράμμα θα το γυρίσει στο αντίστοιχο μικρό άτονο πχ  αν την καλέσω σαν: select dbo..F_CutGreekTones('ΑνανΆς') θα γυρίσει 'Ανανας' αντί ΑνανΑς που θέλω να κάνει.

     

    Σκέφτηκα λοιπόν αντί να κάνω αντκατάσταση απευθείας του χαρακτήρες να το κάνω με Ascci κωδικούς όπου το Ά είναι διαφορετικό από ά

    αλλά εξακολουθώ να έχω το ίδιο πρόβλημα

    CREATE Function dbo.F_CutGreekTones(@STR  varchar(8000) )
    RETURNS VARCHAR(8000)
    AS
    BEGIN
      
     -- Για τα μικρά τονισμένα
     SET @STR=REPLACE(@STR,CHAR(220),CHAR(225))
     SET @STR=REPLACE(@STR,CHAR(221),CHAR(229))
     SET @STR=REPLACE(@STR,CHAR(222),CHAR(231))
     SET @STR=REPLACE(@STR,CHAR(223),CHAR(233))
     SET @STR=REPLACE(@STR,CHAR(252),CHAR(239))
     SET @STR=REPLACE(@STR,CHAR(253),CHAR(245))
     SET @STR=REPLACE(@STR,CHAR(254),CHAR(249))


     -- Για τα Κεφαλαία τονισμένα
     SET @STR=REPLACE(@STR,CHAR(162),CHAR(193))
     SET @STR=REPLACE(@STR,CHAR(184),CHAR(197))
     SET @STR=REPLACE(@STR,CHAR(185),CHAR(199))
     SET @STR=REPLACE(@STR,CHAR(186),CHAR(201))
     SET @STR=REPLACE(@STR,CHAR(188),CHAR(207))
     SET @STR=REPLACE(@STR,CHAR(190),CHAR(213))
     SET @STR=REPLACE(@STR,CHAR(191),CHAR(217))

     return @str
    END

    Ευχαριστώ πάρα πολύ!


    Best Regards
  •  10-07-2007, 11:26 33490 σε απάντηση της 33489

    Απ: Κόψιμο τόνων από Varchar στήλη

    Χρειάζεται να κατανοήσεις το θέμα του Collation στον SQL Server. Υποθέτω ότι τον έχεις σετάρει ως Case Insensitive, οπότε μπορεί να αποθηκεύει σωστά τα κεφαλαία και τα πεζά αλλά στα string operations τα θεωρεί ίδια. Όταν συμβαίνει αυτό, μπορούμε να κάνουμε override αυτή τη συμπεριφορά χρησιμοποιώντας το COLLATE clause στα διάφορα TSQL statements. Θα πρέπει λοιπόν να αλλάξεις το κάθε REPLACE statement και να το κάνεις κάπως έτσι:

    SET @STR=REPLACE(@STR COLLATE Greek_CS_AS,'ά','α' )


    Vir prudens non contra ventum mingit
  •  10-07-2007, 11:32 33491 σε απάντηση της 33490

    Απ: Κόψιμο τόνων από Varchar στήλη

    Να συμπληρώσω κι εγώ ότι το CS στο Greek_CS_AS σημαίνει Case Sensitive. Αν ρίξεις μια ματιά στις ιδιότητες της βάσης σου θα δεις ότι χρησιμοποιεί κάποιο collation που γράφει CI (πιθανότατα το Greek_CI_AI), δηλαδή case insensitive. By default οι βάσεις δημιουργούνται ως case insensitive.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  10-07-2007, 11:51 33492 σε απάντηση της 33489

    Απ: Κόψιμο τόνων από Varchar στήλη

    Ευχαριστώ πολύ παιδιά το η απάντηση σας ήταν πάρα πολύ χρήσιμη. 


    Best Regards
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems