Extraire minute d'une variable de type xs:duration (SQL SERVER 2005)

Signaler
Messages postés
10
Date d'inscription
jeudi 29 mars 2007
Statut
Membre
Dernière intervention
11 décembre 2007
-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
-
Salut à tous !
Je suis devant un gros problème, et je n'arrive pas à trouver de solution.
En fait, j'ai en base de données un champs xml, et une des données me renvoit "PT15M". Cette donnée est d'après mon schéma de type xs:duration.
Avec une procédure stoquée, je récupère bien la valeur en string. Cependant, il me faut la valeur en minute.

J'ai cherché sur le net comment faire pour extraire les minutes de cette donnée. Mais j'arrive sur des fonctions que je n'arrive pas a mettre en place. Pour être franc, je ne comprend rien. En réalité, je n'arrive pas à trouvé d'exemple explicite.

Pourriez-vous m'aider ?

Merci pour votre aide !!

1 réponse

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Hello,

En regardant sur google, je suis tombé sur cet article de w3school, expliquant les xs:datetime et xs:duration.

Si tu n'as que des minutes, ce champs sera toujours construit en commençant par "PT", et terminé par "M". donc tu enlèves les deux premiers et le dernier caractères et il te reste les minutes.

Par contre, si tu peux avoir des durées plus compliquées, avec des heures, des secondes, voirs des jours ou des années, je te conseillerais d'utiliser les expression régulières.

string
duration=
"-P5Y2M10DT15H10M3S";

Regex
reg =
new
Regex(
@"(?<Negative>-)?P(?:(?<Years>\d+)Y)?(?:(?<Months>\d+)M)?(?:(?<Days>\d+)D)?(?:T(?:(?<Hours>\d+)H)?(?:(?<Minutes>\d+)M)?(?:(?<Seconds>\d+)S)?)?");

Match
m =
reg.
Match(
duration);

if (!
m.
Success)

   throw
new
Exception(
string.
Format(
"Bad format of duration argument : {0}",
duration));

int
years = 0;

int
months = 0;

int
days = 0;

int
hours = 0;

int
minutes = 0;

int
seconds = 0;

bool
negative =
false;

int.
TryParse(
m.
Groups[
"Years"].
Value,
out
years);

int.
TryParse(
m.
Groups[
"Months"].
Value,
out
months);

int.
TryParse(
m.
Groups[
"Days"].
Value,
out
days);

int.
TryParse(
m.
Groups[
"Hours"].
Value,
out
hours);

int.
TryParse(
m.
Groups[
"Minutes"].
Value,
out
minutes);

int.
TryParse(
m.
Groups[
"Seconds"].
Value,
out
seconds);

negative =
m.
Groups[
"Negative"].
Value ==
"-";

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)