Requête SQL de type select pour une date donnée
Ma table ressemble à ci-dessous
tbPatientEpisode
EpisodeIDP int
EpisodeNumber varcher
EpisodeDate datetime
lorsque vous essayez avec ci-dessous requête SQL
SELECT * FROM tbPatientEpisode
il me montrer les résultats, comme l'image ci-dessous..
je veux données pour une date particulière, comme 2013-01-22 pour cela, j'ai essayé ci-dessous requête SQL
SELECT * FROM tbPatientEpisode where EpisodeDate like '%2013-01-22%'
mais il n'a pas de retour tout ligne. ce problème avec ma requête ou est-il une bonne façon d'obtenir ce genre de résultat..toute aide sera apprécier.
- ne l'utilisez pas comme sur les colonnes de date.
Vous devez vous connecter pour publier un commentaire.
C'est parce que votre colonne
EpisodeDate
est de type datetime.Vous pourriez lancer
EpisodeDate
de type datetime, mais il permettra d'éviter l'utilisation d'index sur la colonne, de sorte que le meilleur moyen que je connaisse est de comparerEpisodeDate
avec deux datetimes:Je vais vous expliquer un peu:
D'abord, vous pouvez comparer EpisodeDate à chaîne sans conversion et sans compter sur SQL Server implicite de conversion, mais vous devez être conscient de deux choses l'une:
varchar
ont moins prioritaire quedatetime
, mais il pourrait empêcher l'utilisation d'index lorsque, par exemple, votre colonne estvarchar
et que vous voulez le comparer avecdatetime
.Donc votre cas vous pouvez utiliser les
mais vous devez être sûr que vous savez ce que vous faites
Je n'ai pas spécifié
dateadd(day, 1, '20130122')
et pas'20130123'
parce que je suis en train de réfléchir 20130122 comme paramètres d'entrée, de sorte que vous pouvez remplacer cette chaîne dans ma requêteNe l'utilisez pas comme sur les colonnes date, il ne va pas au travail.
À la place (SQL Server 2008):
Note: ce formulaire n'utilisera pas d'indice en vigueur, en commençant par la colonne
EpisodeDate
Si vous voulez vous assurer que tout indice applicable est l'utilisation (et fonctionne sur SQL Server 2005):
@Mitch Wheat
il me montrer avertissement commeType date is not a defined system type.
.DATE
est (à ma connaissance) pas un type dans SQL Server 2005.basé sur le plan d'exécution, en utilisant COMME, système de convertir toutes les colonnes de type VARCHAR, puis seulement effectuer l'analyse
Pourquoi il n'y a aucune raison de retourner dans votre requête? c'est parce que le système est déjà converti datetime à nvarchar qui est quelque chose comme 22 Jan 2013 10:55AM
et c'est pourquoi il n'y a pas de résultat, c'est le retour
essayez de modifier votre requête à
ce doit être beau travail, et ci-dessous sont d'autres façon d'utiliser le souhaitez, jetez votre episodeDate à certains format comme "2013-01-22'
enfin j'espère que mon explication en mesure d'aider u de comprendre ce qui se passe exactement sur, encourager frère =)
Cette réponse tenter d'expliquer d'abord pourquoi
EpisodeDate like '%2013-01-22%'
solution ne fonctionne pas, que pouvez-vous faire pour obtenir les résultats souhaités à l'aide delike ...
(je ne recommande pas) et, enfin, je vous présente deux solutions (avec et sans les conversions implicites). Toutes les requêtes peuvent être exécutées sur Exemple de base de données AdventureWorks2008R2:Plan d'exécution:
Plan d'exécution:
Plan d'exécution:
{d '2005-11-20'}
estdatetime
:SELECT SQL_VARIANT_PROPERTY({d '2005-11-20'}, 'BaseType')
.