2010-06-03 23 views
1

Ma table de base de données « tâche » ressembler à ceci:C# Finisar SQLite DateTime Comparaison problème

[title] [content] [start_date] [end_date] 
[...] [...] [01.06.2010 20:10:36] [06.06.2010 20:10:36] 
[...] [...] [05.06.2010 20:10:36] [06.06.2010 20:10:36] 

Et je veux trouver que les enregistrements qui répondent à la condition qu'un jour donné est entre date_début et date_fin.

J'ai essayé l'expression SQL suivante:

SELECT * FROM task WHERE 
strftime ('%d', start_date) <= @day 
AND 
@day <= strftime ('%d', end_date) 

Où @day est un SQLiteParameter (éq 5). Mais aucun résultat n'est retourné.

Comment puis-je résoudre ce problème?

Merci.

Répondre

1

Il semble que les fonctions de travail avec des données et de temps en SQLite3 n'accepte pas comme paramètre une colonne de table. Attend seulement des chaînes. Mais à la place, vous pouvez faire des comparaisons de données en utilisant des chaînes.

Exemple:

SELECT * FROM table WHERE 
table_column> = "06.25.2010 00:00:00" 
AND 
table_column <"06.25.2010 23:59:59" 

Ce travail pour moi.

+0

Merci Emanuel qui fonctionne bien, mais seulement erreur que vous avez fait ici est le format doit être identique dans les deux conditions, c'est-à-dire, il doit être mm.dd.yyyy. Je vais le corriger. –

0

Vos noms de colonnes ne doivent pas être entre guillemets simples car cela créerait des chaînes. Au lieu de cela, vous pouvez utiliser des guillemets doubles, ou dans ce cas vous n'avez pas besoin de guillemets. Essayez ceci:

SELECT * 
FROM task 
WHERE strftime('%d', start_date) <= @day 
AND @day <= strftime('%d', end_date) 

ou peut-être vous dire ceci:

SELECT * 
FROM task 
WHERE date(start_date) <= @day 
AND @day <= date(end_date) 
+1

Cet exemple ne fonctionne pas pour moi. – Emanuel

0

Attendez, mal compris votre requête destinée. Cela devrait fonctionner:

SELECT * FROM task WHERE 
strftime ('%d', start_date) <= @day 
AND 
@day <= strftime ('%d', end_date) 

fourni @day est en fait un type de texte à 2 chiffres. Pour que cela fonctionne avec les types numériques, utilisez:

SELECT * FROM task WHERE 
CAST(strftime('%d', start_date) as integer) <= @day 
AND 
@day <= CAST(strftime('%d', end_date) as integer) 
+0

près de "as": erreur de syntaxe – Emanuel

+0

@Emanuel: Le concepteur de requêtes Visual Studio se plaindra qu'il ne reconnaît pas le mot-clé 'AS', mais la requête s'exécute réellement pour moi. – Thorarin

1
SELECT * 
FROM task 
WHERE @day BETWEEN date(start_date) and date(end_date) 
+0

+ 1 pour l'utilisation entre –