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

swyms Messages postés 10 Date d'inscription jeudi 29 mars 2007 Statut Membre Dernière intervention 11 décembre 2007 - 18 oct. 2007 à 18:07
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 19 oct. 2007 à 09:04
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

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
19 oct. 2007 à 09:04
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)
0
Rejoignez-nous