Sql server将日期值作为参数传递给convert

时间:2011-11-07 13:10:23

标签: sql sql-server datetime variables

我编写了一个在日期和另一个日期之间选择数据的SQL。 基本上问题是关于我想做出一些选择的日期格式

我的coloum名称是date_tm,样本数据如下:2011-04-04 00:30:19.107

我的Sql是这样的:

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';

我尝试使用此

进行调试
Print(@Date_From);
Print(@Date_To); 

输出是这样的“2011年11月6日12:00 AM”我是不是很难转换它? 然后我用这样的select语句测试:

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

输出是这样的“2011-11-06”为什么它在这里工作?

选择结果是什么==“

然后我就这个日期格式做了很多测试 我尝试直接解析date_from和Date_to

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

我得到了预期的

无论如何,我想要的是通过一系列日期获取数据。我正在用这种转换方法压低我的头==“

请帮帮我。

感谢:

PS:请不要犹豫,说出我的错误。我们都从错误中吸取教训,并为我可怜的英语道歉。

问候:

LiangCk

1 个答案:

答案 0 :(得分:1)

这是因为您将两个变量声明为datetime而不是varchar(10)。 SQL会自动将其转换回日期时间,因为您的变量是datetime。

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