1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| -- Si la fonction fPremiereLettreMajuscule existe, on la supprime
IF EXISTS
(
SELECT TOP 1 1
FROM sys.objects
WHERE name = 'fPremiereLettreMajuscule'
AND TYPE = 'FN'
)
DROP FUNCTION fPremiereLettreMajuscule
GO
-- Creation de la fonction de mise en majuscule de la première lettre de tous les mots d'une phrase
CREATE FUNCTION fPremiereLettreMajuscule (@str VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @result VARCHAR(8000);
-- Extraction des mots de la phrase par recherche des espaces
WITH
CTE_Espaces AS
(
SELECT 1 Deb, CHARINDEX(' ', @str + ' ') Fin
UNION ALL
SELECT Fin + 1, CHARINDEX(' ', @str + ' ', Fin + 1)
FROM CTE_Espaces
WHERE CHARINDEX(' ', @str + ' ', Fin + 1 ) > 0
)
-- Formatage des mots et concaténation
SELECT @result = ISNULL(@result, '') + UPPER(SUBSTRING(SUBSTRING(@str, Deb, Fin), 1, 1)) + LOWER(SUBSTRING(SUBSTRING(@str, Deb, Fin - Deb + 1), 2, Fin))
FROM CTE_Espaces
RETURN @result
END
GO
---------
-- TEST -
---------
-- Suppression de la table TbPhrases si elle existe
IF EXISTS
(
SELECT TOP 1 1
FROM sys.objects
WHERE name = 'TbPhrases'
AND TYPE = 'U'
)
DROP TABLE TbPhrases
GO
-- Creation de la table de test
CREATE TABLE TbPhrases
(
Phrase VARCHAR(8000)
)
GO
-- Creation des données de test
INSERT INTO dbo.TbPhrases VALUES ('bonjour djaiffe')
INSERT INTO dbo.TbPhrases VALUES ('coucou sqlpro')
INSERT INTO dbo.TbPhrases VALUES ('adiou elsuket')
INSERT INTO dbo.TbPhrases VALUES ('hello developpez ;)')
GO
-- Mise en majuscule de la première lettre de tous les mots des phrases stockées dans dbo.TbPhrases
UPDATE dbo.TbPhrases
SET Phrase = dbo.fPremiereLettreMajuscule(Phrase)
GO
-- Resultat
SELECT Phrase
FROM dbo.TbPhrases |
Partager