2010-05-03 4 views
1

j'ai la requête suivante:serveur sql datetime

select * from table where table.DateUpdated >='2010-05-03 08:31:13:000' 

toutes les lignes de la table interrogée ont la DateUpdated suivante:

2010-05-03 08:04:50.000 

retourne toutes les lignes de la table - même mais il ne devrait en renvoyer aucun. Je suis assez sûr que c'est à cause de quelque chose de merde régional date/heure.

si je troque la date à

select * from table where table.DateUpdated >='2010-03-05 08:31:13:000' 

alors il ne comme il se doit.

Comment puis-je forcer tout à utiliser les mêmes paramètres? ceci fait ma tête dans :)

Ceci est sql généré par NHIbernate à partir de mon service WCF si cela est important.

w: //

+0

Pourriez-vous nous montrer quelle technique vous utilisez pour que NH interroge la base de données –

+0

que voulez-vous dire? – iwayneo

+0

Utilisez-vous CreateQuery(), CreateCriteria(), CreateSqlQuery(), NHibernate.Linq ou une autre méthode? –

Répondre

0

La réponse à cela était de passer à 2008 et utiliser datetime2

quel PITA !!!

0

Vous pouvez essayer:

select * from table 
where Convert(DateTime, table.DateUpdated,103) >= Convert(DateTime, '2010-05-03 08:31:13:000',103) 
+0

hey-cheers - je regarde cela maintenant - le problème est que cela vient de nhibernate. Je ne comprends pas pourquoi ça ne marche pas comme striaght sql. – iwayneo

+0

également - comme cela devient un delta depuis la dernière mise à jour de l'application - il doit être fait en utilisant l'heure ainsi que la date ... – iwayneo

4

Utilisez ce format "aaaammjj hh: nn: ss.mmmm" qui est indépendante locale dans SQL Server, toutes les versions

Quelque part, il est le 5 février plutôt que le 3 mai

Pourquoi:

  • "aaaa-mm-jj" est pas locale indépendante dans SQL Server avec des colonnes datetime
  • cette anomalie est fixée avec datetime2 dans SQL Server 2008

Références:

Exemple:

SET DATEFORMAT DMY --UK 
SELECT 
    MONTH(CAST('2010-03-05 08:31:13:000' AS datetime)), --gives 5 
    MONTH(CAST('20100305 08:31:13:000' AS datetime)) --gives 3 


SET DATEFORMAT MDY --default, USA 
SELECT 
    MONTH(CAST('2010-03-05 08:31:13:000' AS datetime)), --gives 3 
    MONTH(CAST('20100305 08:31:13:000' AS datetime)) --gives 3 
+0

hmph - qui répond à la partie sql de la question mais je n'ai aucune idée de comment utilisez ceci dans nhobernate :( – iwayneo

+0

est-il un paramètre régional ou régional, ou pouvez-vous formater la date vous-même? – gbn

+2

semble qu'il y avait le type datetime2 ajouté à nhibernate pour aller avec le dialecte MsSqlServer2008 - va essayer cela ... – iwayneo