Extraire minute d'une variable de type xs:duration (SQL SERVER 2005)
swyms
Messages postés10Date d'inscriptionjeudi 29 mars 2007StatutMembreDernière intervention11 décembre 2007
-
18 oct. 2007 à 18:07
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDerniè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.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 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)