2016-01-20 83 views
0
Declare @FromDate as datetime, 
     @ToDate as datetime 

set @FromDate = '2000-01-01', 
    @ToDate = '2001-01-01' 

Select * 
from Mytable 
Where 
    Convert(varchar,ses_begin_date,101) >= Convert(varchar,@FromDate, 101) 
    AND Convert(varchar,ses_begin_date, 101) <= Convert(varchar,@ToDate,101) 

儘管裏面已經有數據,但它不返回任何數據。獲取不同年份的2個日期之間的確定日期

+4

爲什麼你處理日期爲varchar? –

+0

尤其不好,使用格式101生成的字符串不會像日期那樣排序,並且在這裏生成兩個字符串,其中沒有其他可能的日期值出現在它們之間。 –

回答

1

您不需要轉換。只要使用這個

Declare @FromDate as datetime, 
     @ToDate as datetime 

set @FromDate = '2000-01-01', 
    @ToDate = '2001-01-01' 

Select * 
from Mytable 
Where 
    ses_begin_date>= @FromDate 
    AND ses_begin_date<= @ToDate 

此外,如果你的目標是讓所有的數據,2000年,使用

Declare @FromDate as datetime, 
     @ToDate as datetime 

set @FromDate = '2000-01-01', 
    @ToDate = '2001-01-01' 

Select * 
from Mytable 
Where 
    ses_begin_date>= @FromDate 
    AND ses_begin_date< @ToDate 
0
Select * 
from Mytable 
Where 
    ses_begin_date>='2000-01-01' 
    AND ses_begin_date<= '2001-01-01' 
0

使用DateDiff函數

Select * 
From Table 
Where Datediff(day,@datefrom, ses_begin_date)<=0 
and Datediff(day,ses_begin_date,@dateto)<=0 
+0

雖然這可能是正確的,但我不會建議您使用此功能,因爲這可以使您的查詢變得不可靠。 –

+0

是爲此目的在關鍵字之間使用 –

0

如果您正在使用比2005年更高的SQL Server。 2008或以上的查詢將會產生日期範圍內的所有記錄。

您沒有獲取記錄,因爲您使用的是「日期時間」,其中也包含可能不會產生所有必需記錄的時間部分。但是,如果範圍僅包含日期部分,則應在比較時將其轉換爲「日期時間」或「日期」類型。

這應該工作。

DECLARE 
    @FromDate DATE , 
    @ToDate DATE; 

SELECT @FromDate = '2000-01-01', 
    @ToDate = '2001-01-01' 

要麼

SELECT 
    * 
FROM 
    @temp 
WHERE 
    (CONVERT(DATE, ses_begin_date) >= @FromDate 
    AND CONVERT(DATE, ses_begin_date) <= @ToDate) 

或者

SELECT 
    * 
FROM 
    @temp 
WHERE 
    (CONVERT(DATE, ses_begin_date) BETWEEN @FromDate AND @ToDate). 

如果您使用的版本低於比2008年多一條路可將其轉換爲「int」刪除日期部分比作比較。即。

DECLARE 
    @FromDate int , 
    @ToDate int; 

SELECT @FromDate = CONVERT(INT, CONVERT(VARCHAR(10),'2000-01-01',112)), 
    @ToDate = CONVERT(INT, CONVERT(VARCHAR(10),'2001-01-01',112)) 

--Either

SELECT 
    * 
FROM 
    @temp 
WHERE 
    (CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) >= @FromDate 
    AND CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) <= @ToDate) 

--Or

SELECT 
    * 
FROM 
    @temp 
WHERE 
    (CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) BETWEEN @FromDate AND @ToDate) 
相關問題