Welcome to Sign in | Help
in Search

caractere unicode

Last post 10-04-2009, 9:54 PM by ggciubuc. 7 replies.
Sort Posts: Previous Next
  •  10-04-2009, 7:49 AM 7638

    caractere unicode

    As dori sa fac un update pe o coloana unde sa pot inlocui caracterul "ș"=nchar(537) cu "Ș"=nchar(350) .

    Nu-mi intoarce nimic o interogare la care am o clauza WHERE unde-i specific o valoare ce contine caracterul "ș", fapt pentru care nici nu pot face update.

    select * from <tabela> where <coloana> like '%METEș%'

    Multumesc anticipat.

  •  10-04-2009, 8:02 AM 7639 in reply to 7638

    Re: caractere unicode

    Încearcă cu:

    select * from tabela where coloana like N'%METEș%'

    (string-urile unicode trebuie prefixate cu N, altfel sunt convertite la string-uri ascii, înainte de execuţie)

    Răzvan
  •  10-04-2009, 8:25 AM 7640 in reply to 7639

    Re: caractere unicode

    Multumesc, a functionat.

    In continuare am folosit replace(<coloana>, nchar(537), nchar(350)) pentru a face un update, dar se pare ca nu-mi detecteaza caracterul "ș".

  •  10-04-2009, 9:39 AM 7641 in reply to 7640

    Re: caractere unicode

    Există două feluri de ş şi ţ: cele cu virguliţă şi cele cu sedilă.

    SELECT NCHAR(536) AS [Ș], NCHAR(537) AS [ș], NCHAR(350) AS [Ş], NCHAR(351) AS [ş]

    SELECT NCHAR(538) AS [Ț], NCHAR(539) AS [ț], NCHAR(354) AS [Ţ], NCHAR(355) AS [ţ]

    Vezi http://ro.wikipedia.org/wiki/Ş
    şi http://ro.wikipedia.org/wiki/Wikipedia:Diacriticele_vechi_şi_noi

    Răzvan
  •  10-04-2009, 10:24 AM 7642 in reply to 7641

    Re: caractere unicode

    Așa este.

    Cum aș putea face update cu "Ș", deoarece în urma unui update cu UPPER, toate caracterele au devenit majuscule, mai puțin "ș"=nchar(537) și din această cauză am valoarea "METEș". Cum spuneam și mai devreme am folosit replace, dar n-a funcționat.

    În schimb, un UPPER pentru caracterul "ș"=nchar(351) a funcționat și a rezultat caracterul "Ș"=nchar(350).

    Să fie oare problemă de COLLATE? Și dacă DA, cum fac totuși update?

  •  10-04-2009, 11:13 AM 7643 in reply to 7642

    Re: caractere unicode

    Într-adevăr, pe majoritatea collation-urilor UPPER(N'şș') returnează 'Şș'. Dacă ai SQL Server 2008, poţi folosi un collation de genul Latin1_General_100_CI_AS sau Romanian_100_CI_AS, iar în acest caz va returna 'ŞȘ'.

    Dacă foloseşti SQL Server 2005 (sau mai vechi), recomand folosirea diacriticelor vechi (cu sedilă, nu cu virgulă), care apar atunci când se foloseşte tastatura "Legacy" în Vista.

    Se pare că pe celelalte collation-uri (în afară de faptul că nu se recunoaşte echivalenţa dintre literele mici şi mari cu virguliţă, ceea ce era de aşteptat, având în vedere că aceste litere au fost introduse mai târziu), mai există şi un bug care cauzează nerecunoaşterea literei respective de funcţia REPLACE, în cazul în care înaintea ei apar alte caractere, precum şi recunoaşterea literei pe o poziţie greşită de funcţia PATINDEX, de exemplu:
    SELECT REPLACE(N'șșaș',N'ș',N'!')
    SELECT PATINDEX(N'%ș%',N'abș')

    Răzvan
  •  10-04-2009, 2:30 PM 7644 in reply to 7643

    Re: caractere unicode

    Mulțumesc Răzvan.

    Am SQL Server 2005 și nu-mi rămâne decât să purced a face căutări și update-uri manual. Nu garantez acuratețe de 100%.

  •  10-04-2009, 9:54 PM 7645 in reply to 7644

    Re: caractere unicode

    Asa cum am vorbit la telefon , anumite prelucrari s-ar putea face mai bine din afara SQL folosind CLR , despre asta aici : http://www.devsource.com/c/a/Using-VS/Introducing-SQL-Server-2005s-CLR-Integration/

    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems