2010-07-23 6 views
0

J'ai besoin de vérifier une valeur DateTime spécifique dans ma table à partir de mon code (VB.NET) et je ne sais pas comment formater le DateTime comme une chaîne. J'ai lu que SQL Server reconnaîtra ma chaîne si c'est dans la date, l'heure, ou le format de date et d'heure. je veux dire:SQL: comment vérifier un DateTime spécifique

'May 15, 2004' 
'5/15/2004' 
'20040515' 
'2004 4 am' 

SQL Server reconnaîtra-t-il ces chaînes comme des valeurs DateTime valides? Je suis curieux parce que si je vérifie les valeurs DateTime réelles dans la table, ils sont dans ce format:

2/2/2006 3:49:33 PM 

Répondre

5

Ne mettez pas la valeur date/heure dans la requête SQL en premier lieu - utiliser une requête paramétrées et alors vous n'avez pas besoin de savoir ou de se soucier du format que SQL Server interpréterait comme des littéraux. Vous placez l'espace réservé dans le SQL et spécifiez la valeur DateTime dans la collection de paramètres. En fait, vous devriez utiliser le SQL paramétré - non seulement il élimine les problèmes de formatage et d'analyse de ce type, mais peut-être plus important encore, c'est l'arme la plus efficace contre les attaques par injection SQL.

+0

Je suis assez sûr que ce code que je modifie utilise SQL paramétré. Je veux coder en dur la valeur DateTime dans une chaîne juste à mes fins de test. –

+1

@ 400_the_cat Pourquoi? Pourquoi ne pas simplement introduire un autre paramètre? Je ne vois pas l'intérêt d'introduire des problèmes pour le plaisir. –

+0

peut-être que je ne comprends pas votre réponse. pouvez-vous publier ou lier un exemple d'utilisation d'une requête paramétrée? –

2

Si vous n'utilisez une requête paramétrée, utilisez CAST/CONVERT changer explicitement une chaîne à un DATETIME:

SELECT CAST('2/2/2006 3:49:33 PM' AS DATETIME) 

Sur mon SQL Server 2005, qui me revient:

2006-02-02 15:49:33.000 

esprit que la le format de date par défaut dans SQL Server peut être différent de celui que vous fournissez.

1

Cela a toujours été sûr que j'ai trouvé: AAAA-MM-JJ HH: MI: SS

1

Si vous comparez à DateTime DateTime, vous n'avez pas à vous soucier de la conversion, necessarilly, mais oui, Sql Server (au moins à partir de 2k8, et je crois que 2k5 aussi) va automatiquement analyser un DateTime à partir d'une chaîne. Autrement dit, si vous passez '5/15/2004', il verra 5/15/2004 12:00:00 AM ou quelque chose de similaire. Cependant, mieux vaut utiliser SqlParameters dans votre SqlCommand à partir de Code.

Questions connexes