Les nouvelles fonctions T-SQL de SQL Server 2012 – Episode 1/8 – PARSE() –

Je vous propose de découvrir les 14 nouvelles fonctions que SQL Server 2012 introduit, en dédiant un billet soit à chacune d’entre-elles, ou bien à un groupe d’entre-elles.

Commençons avec la fonction PARSE() …

La syntaxe d’utilisation de cette fonction est la suivante :

PARSE('<uneValeur>' AS <data_type> [USING '<culture>'])

La nouveauté c’est la possibilité de formater une valeur suivant une culture, et ce n’est pas moins de 33 cultures qui sont disponibles !
De façon générale, cette fonction est une extension de ce que l’on peut faire avec CONVERT().
Rappelons dans les deux cas qu’il s’agit de fonctions de formatage de données.

On notera que :

data_type est limité aux types suivants : bigint, int, smallint, tinyint, decimal, numeric, float, real, smallmoney, money, date, time, datetime, smalldatetime, datetime2 et datetimeoffset.

– On ne peut pas utiliser PARSE() pour exécuter une requête sur un serveur distant, car celle-ci dépend du .NET Framework 3.5 SP1 , et que rien ne garantit qu’il est présent sur la machine distante.

Faisons quelques essais !

SELECT PARSE ('100.000' AS int)

Alors qu’un SELECT CONVERT(int, '100.000') :

Essayons un SELECT PARSE('Lundi 16 Avril 2012' AS datetime USING 'fr-FR')

Voyons au format Anglo-Saxon : SELECT PARSE('Monday 16 April 2012' AS datetime USING 'en-US')

Quid du format que l’on nous a donné à l’école ? SELECT PARSE('Monday, April 16 2012' AS datetime USING 'en-US')

En revanche SELECT PARSE('Monday, April 16th 2012' AS datetime USING 'en-US')

Essayons SELECT PARSE('April, 16 2012' AS datetime USING 'en-US')

Voyons avec une date du calendrier Grégo-Thaï : en effet, le calendrier Grégo-Thaï à 543 ans d’avance sur le calendrier Grégorien :
SELECT PARSE(N'16 &#3648;&#3617;&#3625;&#3634;&#3618;&#3609; 2555' AS datetime USING 'Th-TH')

Et avec des variables ?

1
2
3
4
DECLARE @date_string char(20) = 'Lundi 16 Avril 2012'
  , @culture char(5) = 'fr-FR'
 
SELECT PARSE(@date_string AS datetime USING @culture)

Et dans une table :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE test_PARSE
(
  date_string nvarchar(20)
  , culture char(5)
  , formatted_date AS (PARSE(date_string AS datetime USING culture))
)
GO
 
INSERT  INTO dbo.test_PARSE
VALUES  (N'Lundi 16 Avril 2012', 'fr-FR'), (N'16 &#3648;&#3617;&#3625;&#3634;&#3618;&#3609; 2555', 'th-TH')
GO
 
SELECT  *
FROM  dbo.test_PARSE

Vous vous demandez s’il sera possible de retourner une valeur décimale avec le symbole de la devise suivant une culture ? la réponse est oui : avec la fonction FORMAT(), que nous verrons au prochain épisode ;)

Bon formatage de données !

ElSüket

Laisser un commentaire