SQL Server datetime COMME choisir?
dans MySQL
select * from record where register_date like '2009-10-10%'
Qu'est-ce que la syntaxe de SQL Server?
- Qu'êtes-vous réellement vouloir vérifier? Un datetime a une date donnée, la partie? Ou quelque chose d'autre?
- Pour une bonne discussion sur le présent (y compris le pourquoi c'est mal de traiter
DATETIME
valeurs comme des cordes, et pourquoi il peut être mauvais pour utiliserBETWEEN
ou>= AND <=
), voir ce blog par Aaron Bertrand. - Votre question a au moins
5
votes pour le comme opérateur de la balise. Pourrais-je vous prie de bien vouloir suggérer sql en tant que synonyme?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le DATEPART() la fonction
Je trouve cette façon, facile à lire, comme il ignore le temps composant, et vous n'avez pas à utiliser le jour suivant la date de restreindre votre sélection. Vous pouvez aller à plus ou moins grande granularité par l'ajout de clauses à l'aide de la Partie de code, par exemple
à obtenir des enregistrements réalisés entre 12 et 1.
Consulter le MSDN DATEPART docs pour la liste complète des arguments valables.
Il n'y a pas de support direct pour COMME opérateur contre DATETIME variables, mais vous pouvez toujours lancer le DATETIME VARCHAR:
Vérifier la MSDN docs pour une liste complète des "styles" dans la fonction CONVERT.
Marc
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Si vous le faites, vous forçant à faire une conversion de chaîne de caractères. Il serait préférable de construire un début/date de fin de la plage, et à utiliser:
Cela permettra d'utiliser l'index (si il y en a un sur
register_date
), plutôt que sur une analyse de la table.Vous pouvez utiliser CONVERTIR pour obtenir la date sous forme de texte. Si vous le convertir en un type varchar(10), vous pouvez utiliser = au lieu de comme:
Ou vous pouvez utiliser une limite supérieure et la limite inférieure de la date, avec l'avantage supplémentaire qu'il pourrait faire usage d'un index:
Malheureusement, Il n'est pas possible de comparer datetime vers varchar à l'aide de "LIKE"
Mais la sortie désirée est possible d'une autre manière.
Vous pouvez également utiliser convertir à faire de la date consultable en utilisant COMME. Par exemple,
La
LIKE
opérateur ne fonctionne pas avec la date des pièces comme le mois ou le jour, mais l'DATEPART
opérateur ne.De commande pour connaître tous les comptes dont la Date d'ouverture a été le 1er:
*CASTING
OpenDt
parce que c'est une valeur enDATETIME
et pas seulementDATE
.Il est très feuilletée couverture de l'opérateur LIKE pour les dates en SQL Server. Il fonctionne uniquement à l'aide de l'Amérique format de date. Comme un exemple, vous pourriez essayer:
J'ai testé cela dans SQL Server 2005 et il fonctionne, mais vous aurez vraiment besoin d'essayer différentes combinaisons. Des choses bizarres que j'ai remarqué sont:
Vous ne semblent obtenir tout ou rien pour les différents sous-champs dans la date, par exemple, si vous recherchez " apr 2%' vous ne recevez rien dans le 20e est - elle omet 2e du.
À l'aide d'un seul trait de soulignement '_' pour représenter un seul (générique) de caractère n'est pas entièrement de travail, par exemple,
WHERE mydate LIKE 'oct _ 2010%'
sera pas retour toutes les dates avant le 10 - il ne renvoie rien du tout, en fait!Le format est rigide Américaine: '
mmm dd yyyy hh:mm
'J'ai trouvé qu'il est difficile de clouer une procédure de LIKEing secondes, donc si quelqu'un veut prendre un peu plus loin, être mon invité!
Espère que cette aide.
Je suis un peu en retard à ce fil, mais en fait, il est le soutien direct de l'opérateur like dans MS SQL server.
Comme documenté dans l'aide si le type de données n'est pas une chaîne, il est tenté de le convertir en une chaîne de caractères. Et comme l'a documenté en fonte d'\convertir de la documentation:
Si vous avez un jour comme celui-ci dans la base de données:
et vous faire des requêtes comme ceci:
vous obtenez la ligne.
Cependant, ce format de date suggère que c'est un DateTime2, puis une documentation dit:
Qui le rend plus facile et vous pouvez utiliser:
et d'obtenir l'enregistrement de facture. Voici une démo de code:
Faire datetime recherches dans SQL serveur, sans aucune conversion de chaîne de caractères a toujours été problématique. L'obtention de chaque partie date est inutile (ce qui serait peu probable l'utilisation d'un index). Probablement une meilleure solution lorsque vous n'utilisez pas la chaîne de conversion serait d'utiliser la gamme de contrôles. c'est à dire:
J'ai résolu mon problème de cette façon. Merci pour les suggestions d'améliorations.
Exemple en C#.