Le server Sql transmet la valeur de date en tant que paramètre avec convertir

J'ai écrit un sql qui sélectionne datatables entre une date et une autre. Fondamentalement, le problème est sur le format de la date que je voulais faire une sélection

Mon nom de coloum est date_tm et des exemples de données comme ceci: 2011-04-04 00: 30: 19.107

Mon Sql aime ceci:

DECLARE @Date_From DATETIME; DECLARE @Date_To DATETIME; SET @Date_From = CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120); SET @Date_To = CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120); select distinct no, lot from database.dbo.TblName Where Convert(varchar(10), Date_Tm, 120) Between '@Date_From' And '@Date_To'; 

J'essaie de le déboguer en utilisant cette

 Print(@Date_From); Print(@Date_To); 

La sortie est quelque chose comme ça "Novembre 6 2011 12:00 AM" suis-je pas convertir son alreadly? et puis j'ai testé avec une déclaration select comme ceci:

 select CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120); 

La sortie est quelque chose comme ça "2011-11-06" pourquoi son travail ici?

Le résultat choisi n'est rien == "

Ensuite, je fais beaucoup de tests concernant ce format de date que j'essaie d'parsingr directement dans date_from et Date_to

 where Convert(varchar(10), Date_Tm, 120) Between '2011-04-04' And '2011-04-04' 

Je reçois ce qui est attendu

Quoi qu'il en soit, ce que je voulais, c'est get des données par une plage de date.Je me écrase la tête avec cette méthode de conversion == "

Aidez-moi, s'il vous plaît.

Merci:

PS: S'il vous plaît n'hésitez pas à exprimer mon erreur. Nous apprenons tous par erreur et désolé pour mon mauvais anglais.

Cordialement:

LiangCk

C'est parce que vous déclarez vos deux variables comme datetime au lieu de varchar (10). SQL le convertit automatiquement en datetime car vos variables sont datetime.

 DECLARE @Date_From VARCHAR(10); DECLARE @Date_To VARCHAR(10);