MySQL to SQL Server: La conversion d'un type de données nvarchar en un datetime

Je reçois ce message d'erreur:

La conversion d'un type de données nvarchar en un datetime

lorsque j'essaie de lier une variable datetime MySQL à une variable smalldatetime dans l'instruction SQL Server. Le code ressemble à:

 $s = $dbcnx->prepare("SELECT MAX(attr_81577_) AS max_date FROM object_70969_"); $s->execute(); $r = $s->fetch(PDO::FETCH_ASSOC); $max_date = $r[max_date]; // we got the maximum date from MySQL table $s = $dbms->prepare("SELECT * FROM orgs WHERE update_date >= :max_date"); // Now we want to filter SQL Server table based on $max_date value $s->bindParam(':max_date', $max_date); $s->execute(); 

Quel est le problème avec cela et que puis-je faire?

Je pense que votre SQL Server peut être confondu par le format de date non standard que vous utilisez. "2015-09-18 16:22:00" est, bien sûr, un format assez raisonnable, mais ce n'est pas sur la list des formats littéraux de date standard pour SQL Server .

Donc, je vais essayer d'utiliser le format ISO 8601, sans ambiguïté, en formatant vos dates comme "2015-09-18T16: 22: 00". PHP a un format spécifique pour ISO 8601, "c", mais ironiquement, il n'est pas compatible avec le format ISO 8601 de SQL Server . Alors, essayez:

 date('Ymd\TH:i:s', strtotime($max_date)); 

Notez que je ne suis pas complètement sûr de ce qui se passe, car le format de date que vous utilisez fonctionne bien avec SQL Server en général , peut-être est-ce lié à votre configuration de server spécifique (format date ou langue) ou avec PDO; Je ne sais pas trop sur le pilote PDO SQL Server.

Bien sûr, SQL Server est traditionnellement utilisé avec le code client Microsoft, qui lie un object date réel au paramètre date plutôt qu'une string, et vous n'aurez donc jamais à vous inquiéter de la mise en forme. Je ne sais pas s'il existe un moyen de le faire avec PDO.

MySQL attend le format de date AAAA-MM-JJ, et je ne suis pas sûr du format Oracle que vous obtenez. Vous pouvez vouloir que PHP traduise la date Oracle en utilisant la fonction ssortingngtotime de PHP.

Un péché:

 $maxDate = date('Ym-d', strtotime($max_date)); 

La méthode strtotime est une merveilleuse petite fonction qui prend des informations de date dans presque n'importe quel format et essaie de les convertir en un horodatage utilisable.