dans MySQL
select * from record where register_date like '2009-10-10%'
Quelle est la syntaxe de SQL Server?
sql-server
sql-like
Paisal
la source
la source
DATETIME
valeurs comme des chaînes, et pourquoi il peut être mauvais à utiliserBETWEEN
ou>= AND <=
), consultez ce blog d'Aaron Bertrand .5
votes pour la balise comme opérateur . Pourrais - je demander de bien vouloir vous suggérer sql comme un synonyme ?Réponses:
Vous pouvez utiliser la fonction DATEPART ()
Je trouve cela facile à lire, car il ignore la composante heure et vous n'avez pas à utiliser la date du lendemain pour restreindre votre sélection. Vous pouvez aller à une granularité plus ou moins grande en ajoutant des clauses supplémentaires, en utilisant le code DatePart approprié, par exemple
pour obtenir des enregistrements entre 12 et 1.
Consultez la documentation MSDN DATEPART pour obtenir la liste complète des arguments valides.
la source
Il n'y a pas de prise en charge directe de l'opérateur LIKE sur les variables DATETIME, mais vous pouvez toujours convertir le DATETIME en VARCHAR:
Consultez la documentation MSDN pour obtenir une liste complète des «styles» disponibles dans la fonction CONVERT.
Marc
la source
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Si vous faites cela, vous le forcez à effectuer une conversion de chaîne. Il serait préférable de créer une plage de dates de début / fin et d'utiliser:
Cela lui permettra d'utiliser l'index (s'il y en a un
register_date
), plutôt qu'une analyse de table.la source
Vous pouvez utiliser CONVERT pour obtenir la date sous forme de texte. Si vous le convertissez en varchar (10), vous pouvez utiliser = au lieu de like:
Ou vous pouvez utiliser une date limite supérieure et inférieure, avec l'avantage supplémentaire de pouvoir utiliser un index:
la source
Malheureusement, il n'est pas possible de comparer datetime vers varchar en utilisant 'LIKE', mais la sortie souhaitée est possible d'une autre manière.
la source
Vous pouvez également utiliser convert pour rendre la date consultable à l'aide de LIKE. Par exemple,
la source
L'
LIKE
opérateur ne travaille pas avec des parties de date comme le mois ou la date, mais l'DATEPART
opérateur le fait.Commande pour découvrir tous les comptes dont la date d'ouverture était le 1er:
* CASTING
OpenDt
parce que sa valeur estDATETIME
et pas seulementDATE
.la source
Il existe une couverture très irrégulière de l'opérateur LIKE pour les dates dans SQL Server. Cela fonctionne uniquement en utilisant le format de date américain. À titre d'exemple, vous pouvez essayer:
J'ai testé cela dans SQL Server 2005 et cela fonctionne, mais vous devrez vraiment essayer différentes combinaisons. Les choses étranges que j'ai remarquées sont:
Vous semblez n'obtenir tout ou rien pour les différents sous-champs dans la date, par exemple, si vous recherchez 'apr 2%', vous n'obtenez rien dans les 20e - il omet les seconds.
L' utilisation d' un seul trait de soulignement « _ » pour représenter un seul caractère (générique) ne fonctionne pas tout à fait, par exemple,
WHERE mydate LIKE 'oct _ 2010%'
ne pas retourner toutes les dates avant le 10 - il ne retourne rien du tout, en fait!Le format est rigide américain: '
mmm dd yyyy hh:mm
'J'ai eu du mal à définir un processus pour LIKEing secondes, donc si quelqu'un veut aller un peu plus loin, soyez mon invité!
J'espère que cela t'aides.
la source
Je suis un peu en retard sur ce fil, mais en fait, il existe un support direct pour l'opérateur like dans le serveur MS SQL.
Comme indiqué dans l'aide LIKE, si le type de données n'est pas une chaîne, il est tenté de le convertir en chaîne. Et comme documenté dans la documentation cast \ convert:
Si vous avez une date comme celle-ci dans la base de données:
et vous faites des requêtes comme celle-ci:
vous obtenez cette ligne.
Cependant, ce format de date suggère qu'il s'agit d'un DateTime2 , alors la documentation dit:
Cela facilite les choses et vous pouvez utiliser:
et obtenez l'enregistrement de la facture. Voici un code de démonstration:
Faire des recherches datetime dans le serveur SQL sans aucune conversion en chaîne a toujours été problématique. Obtenir chaque partie de date est une exagération (qui utiliserait peu probablement un index). Un meilleur moyen lorsque vous n'utilisez pas de conversion de chaîne serait probablement d'utiliser des vérifications de plage. c'est à dire:
la source
Essaye ça
la source
J'ai résolu mon problème de cette façon. Merci pour les suggestions d'améliorations. Exemple en C #.
la source