Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2008, 15h43   #1
Invité de passage
 
Inscription : mai 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 7
Points : 2
Points : 2
Par défaut Convertir une chaîne de caractères en UNICODE

Bonjour tout le monde !

Je souhaiterai créer une fonction qui me permette de convertir une chaîne de caractères en Unicode.

Pour cela je sais qu'il existe la fonction UNICODE() mais celle-ci ne convertit que le premier caractère de ma chaîne.

Voici la fonction que je tente de réaliser :

Citation:
CREATE FUNCTION [dbo].[convertUnicode] (@chaine nvarchar(MAX))
RETURNS varchar(MAX)
AS
BEGIN
DECLARE @RETVAL VARCHAR(MAX)
DECLARE @position INT
SET @position = 1
WHILE @position <= len(@chaine)
BEGIN
SET @RETVAL = @RETVAL+'&#'+CONVERT(nvarchar(70),UNICODE(SUBSTRING(@chaine, @position, 1)))+';'
SET @position = @position + 1
END
RETURN @RETVAL

END
Je me suis inspirée pour cela de la fonction que j'ai trouvé sur le site de MSDN : http://msdn.microsoft.com/fr-fr/library/ms180059.aspx (Dans la partie B)

Le problème de cette fonction est qu'elle ne me renvoit rien...

Lorsque j'éxecute ce code :

Citation:
DECLARE @RETVAL VARCHAR(MAX)
DECLARE @position int, @nstring nvarchar(MAX), @chaine NVARCHAR(MAX)
SET @position = 1
SET @nstring = N'موجز ما قبل السوق'
WHILE @position <= len(@nstring) BEGIN
SET @chaine = @chaine + '&#'+CONVERT(nvarchar(MAX),UNICODE(SUBSTRING(@nstring, @position, 1)))+';'
SET @position = @position + 1

END
print @chaine
Rien ne s'affiche...

Par contre quand j'éxecute ce code :

Citation:
DECLARE @RETVAL VARCHAR(MAX)
DECLARE @position int, @nstring nvarchar(MAX), @chaine NVARCHAR(MAX)
SET @position = 1
SET @nstring = N'موجز ما قبل السوق'
WHILE @position <= len(@nstring) BEGIN
SET @chaine = '&#'+CONVERT(nvarchar(MAX),UNICODE(SUBSTRING(@nstring, @position, 1)))+';'
SET @position = @position + 1
print @chaine
END
ça m'affiche ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
&#1605;
&#1608;
&#1580;
&#1586;
 
&#1605;
&#1575;
 
&#1602;
&#1576;
&#1604;
En espérant trouver une solution.

Cordialement
Godia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 15h55   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 792
Points : 17 792
Code :
CAST(maDonnée AS N[VAR]CHAR(???))
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 16h53   #3
Invité de passage
 
Inscription : mai 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 7
Points : 2
Points : 2
Citation:
Envoyé par SQLpro Voir le message
Code :
CAST(maDonnée AS N[VAR]CHAR(???))
A +
Où est-ce que je peux mettre ce CAST dans ma fonction ?!

Vu que mon paramètre est en NVARCHAR je ne vois pas pourquoi il faudrait encore le reconvertir ?

Moi j'aimerais obtenir une chaîne de ce genre :
Code :
&#1605;&#1608;&#1580;&#1586; &#1605;&#1575; &#1602;&#1576;&#1604;
Mon problème se situe dans ma fonction, au moment de la concaténation de @RETVAL. Et je ne vois pas pourquoi...
Godia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 16h15   #4
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 162
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 162
Points : 1 618
Points : 1 618
Ne pas oublier le N'...' avant la chaine que vous définissez comme unicode...

Voici un exemple, il vaudra sans doute mieux qu'un long discour :
Code :
1
2
3
4
5
6
7
8
9
 
declare @testOK nvarchar(10)
declare @testNOK nvarchar(10)
 
SET @testOK = N'&#937;blabalbal'
SET @testNOK = '&#937;blabalbal'
 
print @testOK
print @testNOK
Dje



Edit : Pas de bol, le forum prend pas l'unicode on dirait ^^
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 16h29   #5
Invité de passage
 
Inscription : mai 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 7
Points : 2
Points : 2
En fait j'ai trouvé la solution à mon problème, il suffisait d'initialiser ma variable @RETVAL avant le début de ma boucle WHILE...

SET @RETVAL = ''

Maintenant j'ai enfin ma chaîne convertit en UNICODE

Merci pour votre aide.
Godia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h33.


 
 
 
 
Partenaires

Hébergement Web