Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2007, 10h54   #1
Membre du Club
 
Inscription : janvier 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 95
Points : 40
Points : 40
Par défaut [ASE][T-SQL] PB récupération d'une date

Bonjour, voici mon problème :

J'ai une base de données SYBASE contenant deux champs :
un champs "datechangement" au format DATE
un champs "heure_creation" au formate TIME

Lorsque je récupère "datechangement" j'obtiens bien la date contenue dans la base mais aussi une heure "bidon" qui m'embête beaucoup.
En clair dans la base j'ai : Jan 2 2007
et à l'affichage j'ai : Jan 2 2007 12:00AM


Pour l'heure_creation dans la base si je fais un select j'obtiens bien une heure mais en PERL quand je fais le SELECT heure_creation j'obtiens l'heure ET une date "bidon"
En clair dans la base j'ai : 1:04PM
et à l'affichage j'ai : Jan 1 1900 1:04PM

J'ai essayé avec timelocal() mais ça ne marche pas..
Code :
1
2
3
4
5
 
#affichage de la date
ref[0] : Nov 18 2006 12:00AM
#resultat avec timelocal
sec=>0 min->0 heures->1 jour->1 mois->0 an->70
Merci d'avance.

Codes sources :

Code :
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
#!/soft/perl/bin/perl -I/data/web/cmia/lib 
 
USE strict;
USE warnings;
USE diagnostics;			# display better warning information
USE CGI::Carp qw(fatalsToBrowser);	# display errors to browser
USE CGI qw/:standard/;
USE CGI;
USE Time::LOCAL; 
 
USE DB::DB_documentation;
USE DATA::Dumper;
 
# Connect Base
 
my $SYBASE_BASE='documentation';
my $connection = DB_documentation::connect($SYBASE_BASE);
 
my $requete = "SELECT datechangement FROM FormChangementProd";
my $sth = $connection->prepare($requete);
	$sth->execute();		
 
my @ref = $sth->fetchrow_array; 
 
my ($secondes, $minutes, $heures, $jour_mois, $mois, $annee, $jour_semaine, $jour_calendaire, $heure_ete)=localtime($ref[0]);
 
print	header,
	start_html(
			-style		=> {	'src'	=> "a"},
			-script		=> {	'src'	=> "b.js"},
			-author		=> '*',
			-meta		=> {	'Keywords'	=> "",
						'Copyright'	=> '*'},
			-title		=> "titre",
		),"<br>ref[0] : ".$ref[0],
		"<br>","sec->".$secondes," min->".$minutes," heures->".$heures," jour->".$jour_mois," mois->".$mois," an->".$annee,
		 #$jour_semaine, $jour_calendaire."-", $heure_ete."-";
	end_html();
ionix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 13h03   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Pour des raisons de simplification DBD::Sybase convertit les types DATE et TIME en DATETIME au moment du fetch.

Il y a plusieurs solutions. Soit au moment du SELECT, avec un convert(varchar, champ_date, 108), soit dans le code perl on peut simplement dire que la valeur 1 janvier 1900 est "invalide" et qu'il faut l'ignorer.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 14h30   #3
Membre du Club
 
Inscription : janvier 2006
Messages : 95
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 95
Points : 40
Points : 40
Merci ça fonctionne enfin !

Mais je ne trouve pas cela trés "propre"


En effectuant des recherches je suis tombé sur bind_param.


$sth->bind_param( 11,$rowdata[10],SQL_DATE);

J'ai pas vraiment compris l'utilité ni comment l'utiliser mais ne serait-ce pas "la solution" ?
ionix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 15h01   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Le bind_param() est utilisé pour le passage de paramètres pour remplacer les "?" dans une requète. Cela n'est pas utile lors d'un "fetch".

J'accepte volontier un patch pour DBD::Sybase pour améliorer le comportement :-)

Michael (auteur de DBD::Sybase)
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 15h08   #5
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Sauf erreur, en 15 devraient apparaître les types DATE et TIME
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql
Administrateur SAP
Mes articles

Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 15h54   #6
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
En effet (et ces nouveaux types sont déjà dispo en 12.5.3).

La problématique est que l'appli cliente n'est pas toujours codée pour différencier ces types, et OpenClient va convertir les DATE et TIME en DATETIME dans ce cas.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web