J'ai la chaîne suivante
áéíóú
que je dois convertir en
aeiou
Comment puis-je l'atteindre ? (Je n'ai pas besoin de comparer, j'ai besoin de la nouvelle chaîne à sauvegarder)
J'ai la chaîne suivante
áéíóú
que je dois convertir en
aeiou
Comment puis-je l'atteindre ? (Je n'ai pas besoin de comparer, j'ai besoin de la nouvelle chaîne à sauvegarder)
Essayez d'utiliser COLLATE
:
select 'áéíóú' collate SQL_Latin1_General_Cp1251_CS_AS
Pour les données Unicode, essayez ce qui suit :
select cast(N'áéíóú' as varchar(max)) collate SQL_Latin1_General_Cp1251_CS_AS
Je ne suis pas sûr de ce que vous pouvez perdre dans la traduction en utilisant la deuxième approche.
Mise à jour
On dirait que œ
est un cas particulier, et nous devons traiter séparément les majuscules et les minuscules. Vous pouvez le faire comme ceci (ce code est un bon candidat pour une fonction définie par l'utilisateur) :
declare @str nvarchar(max) = N'ñaàeéêèioô; Œuf un œuf'
select cast(
replace((
replace(@str collate Latin1_General_CS_AS, 'Œ' collate Latin1_General_CS_AS, 'OE' collate Latin1_General_CS_AS)
) collate Latin1_General_CS_AS, 'œ' collate Latin1_General_CS_AS, 'oe' collate Latin1_General_CS_AS) as varchar(max)
) collate SQL_Latin1_General_Cp1251_CS_AS
-- Output:
-- naaeeeeioo; Oeuf un oeuf
Fonction définie par l'utilisateur
create function dbo.fnRemoveAccents(@str nvarchar(max))
returns varchar(max) as
begin
return cast(
replace((
replace(@str collate Latin1_General_CS_AS, 'Œ' collate Latin1_General_CS_AS, 'OE' collate Latin1_General_CS_AS)
) collate Latin1_General_CS_AS, 'œ' collate Latin1_General_CS_AS, 'oe' collate Latin1_General_CS_AS) as varchar(max)
) collate SQL_Latin1_General_Cp1251_CS_AS
end
Ne fonctionne que pour les colonnes non unicode. C'est-à-dire qu'il ne fonctionnera pas pour N'áéíóú'
.
Je cherche une solution qui supprime les accents, mais laisse toutes les lettres étrangères en Unicode. Par exemple, je dois convertir 'á' en 'a', mais sans toucher à '' ou ''.
Utilisez la fonction de traduction :
SELECT TRANSLATE(
N'INPUT: ïÜ×Ìùµ©ÃÙÓÿâåòÔÕýçÀìóèüíÄûØõäÕîà£êßøŽÖáÉú¥šŸ¢éÈÆÍÛÝÊöÏëÎæãñÒÚÅÁô',
N'ÁÀÂÃÄÅàáâãäåæÆÇÈÉÊËèéêëÌÍÎÏìíîï£ÑñÒÓÔÕÕÖØòóôõöø®ŠšßÙÚÛÜùúûüµŸÿýž',
N'aaaaaaaaaaaaaaaaaaccccccccddddeeeeeeeeeeeeeeiiiiiiiiiilllnnnnnooooooooooooooooorrsssssttuuuuuuuuuuuuuxyyyyyzzzzzz');
-- OUTPUT: 'INPUT: iuxiuuuccidaueonyaraooolcycazuioeuuiauooaotzioaleosozoadeeuaiaezuoncczrsyeeszessycleaedaiuaydeceonoineiaatnouaaao'
Consultez ce lien pour trouver d'autres personnages "sosies" :
Parfois, la chaîne de caractères peut avoir une autre COLLATION, de sorte que vous avez toujours des accents dans le résultat. Dans ce cas, vous pouvez utiliser cette ligne ( basé sur cette solution ici ):
SELECT convert(varchar, your_string) COLLATE SQL_Latin1_General_Cp1251_CS_AS;
J'ai eu le même problème. En grec, pour une conversion correcte en UPPER(), vous devez supprimer l'accent. Changer la collation causait des problèmes dans d'autres applications. En mettant en place certaines fonctions REPLACE(), j'ai eu plus de contrôle sur le comportement du maintien de la collation. Voici mon ToUpperCaseGR fonction.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION ToUpperCaseGR
(
@word nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
-- Declare the return variable here
declare @res nvarchar(max)
set @res = UPPER(@word)
set @res = replace(@res,'','')
set @res = replace(@res,'','')
set @res = replace(@res,'','')
set @res = replace(@res,'','')
set @res = replace(@res,'','')
set @res = replace(@res,'','')
set @res = replace(@res,'','')
-- Return the result of the function
RETURN @res
END
GO
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Je cherche une solution qui supprime les accents, mais laisse toutes les lettres étrangères en Unicode. Par exemple, je dois convertir 'á' en 'a', mais sans toucher à '' ou ''.