web-dev-qa-db-fra.com

Comparaison date/heure SQL

Je souhaite obtenir des valeurs de ma table et certaines conditions s'appliquent à ses colonnes datetime. 

Je souhaite obtenir toutes les valeurs hôtelières d'une ville donnée de ma table, nommée "LocalHotels". De plus, je devrais déclarer deux DateTimevalues. La première valeur doit être inférieure ou égale à la valeur de l'hôtel dans "start" column, qui correspond au type de données datetime. La deuxième valeur doit être supérieure ou égale à la valeur de l'hôtel dans "date limite" colonne, qui est soit le type de données datetime, soit. 

Toutes les valeurs datetime de ces deux colonnes sont insérées au format allemand CultureInfo.

Quand j'ai énoncé la requête ci-dessous, il n'y a pas de problèmes;

string query = "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='5.12.2015 00:00:00' AND deadline >='8.12.2015 00:00:00' ORDER BY city";

Cependant, lorsque j’ai changé la valeur journalière de DateTime valeurs d’un chiffre à deux chiffres, comme je l’ai indiqué ci-dessous;

string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='15.12.2015 00:00:00' AND deadline >='18.12.2015 00:00:00' ORDER BY city"

J'ai eu une SQLException qui indique; 

La conversion d'un type de données varchar en un type de données datetime a entraîné dans une valeur hors limites.

Même si en Europe et partout dans le monde, il est parfaitement logique d'utiliser le mois comme deuxième élément sur trois de la date. Aux États-Unis et dans ce cas, apparemment, la date et l'heure de SQL sont MM.JJ.AAAA, vous partez donc pour le quinzième et le dix-huitième mois 

Par conséquent, vous devriez utiliser 

string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='12.15.2015 00:00:00' AND deadline >='12.18.2015 00:00:00' ORDER BY city"

ou 

string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='2015-12-15' AND deadline >='2015-12-18' ORDER BY city"
7
Иво Недев

Essayez de changer 

15.12.2015 00:00:00 

à 

2015-12-15 00:00:00

et même format pour l'autre date également.

SELECT CONVERT(char(10), GetDate(),126)

ou 

select convert(varchar,getDate(),112)

ou 

select replace(convert(varchar, getdate(), 111), '/','-')

Testez les requêtes ci-dessus pour obtenir la date au format souhaité (remplacez GetDate() par votre date ou dateColumn). Comme d'autres l'ont souligné, vous avez besoin du format AAAA-MM-JJ.

1
CM2K

Vous pouvez visualiser le format de date et d'heure de SQL Server pour vous-même en exécutant la requête suivante:

SELECT
    GETDATE()

Comme vous pouvez le voir, le format est AAAA-MM-JJ HH: MM: SS.MMM. Tenez-vous en à cela et vous ne rencontrerez aucune erreur de conversion inattendue.

1
destination-data