2013-07-29 90 views
1

我工作的一個項目,並停留在一個sqlquery,查詢沒有提供任何錯誤,也沒有返回任何結果告訴我問題出在哪裏通配符SQL日期查詢

SELECT 
     barcode 
    , Date 
    , timein 
    , timeout 
    , totaltime 
    , leave 
    , remarks 
FROM TimeSheet 
WHERE barcode = @barcode 
    AND Date LIKE '@year-07-%' 

我傳遞2個值變量在運行時@barcode@year ,但如果我用值運行查詢的SQL編輯器中鍵入明確它工作正常,如果運行這個

SELECT 
     barcode 
    , Date 
    , timein 
    , timeout 
    , totaltime 
    , leave 
    , remarks 
FROM TimeSheet 
WHERE barcode = 123456 
    AND Date LIKE '2013-07-%' 
返回值

它返回值

+0

西隧是烏拉圭回合的隱藏代碼是VB或C# –

+0

代碼隱藏的C# – Mohsin

+1

什麼是你'Date'列的數據類型? –

回答

7

SQL Server不擴展變量'@year-07-%'

假設@year參數是varchar[date]列是date,可以轉而嘗試這個辦法:

where convert(varchar(10), [date], 120) like @year + '-07-%' 

甚至更​​好:

where datepart(year, [date]) = cast(@year as int) 
     and datepart(month, [date]) = 7 
+0

仍然不顯示任何結果 – Mohsin

+0

@MohsinMustufa - 「@ year」的聲明數據類型是什麼? –

+0

'[日期]'列的數據類型是什麼? – Andomar

3

以下將是有效的,如果有是DATE列的索引

SELECT 
     barcode 
    , Date 
    , timein 
    , timeout 
    , totaltime 
    , leave 
    , remarks 
FROM TimeSheet 
WHERE barcode = @barcode 
    AND Date >=dateadd(month,6,dateadd(year,@year-1900,0)) 
    AND Date <dateadd(month,7,dateadd(year,@year-1900,0)) 
+0

相同的結果不返回任何值 – Mohsin

+0

@MohsinMustufa然後測試您的數據。這將工作和執行最好 –

1

這是Andomar建議的。

create table #timesheet (barcode int, entrydate date, other_col varchar(20)) 

insert into #timesheet (barcode, entrydate , other_col) 
values (123456,'2013-07-01','helloA') 
    ,(123456,'2013-07-02','helloB') 
    ,(123457,'2013-07-02','helloC') 
    ,(123456,'2013-06-01','helloD') 

DECLARE @YEAR VARCHAR(4) = '2013' 
    ,@barcode int = 123456 

Select * 
From #timesheet 
Where barcode = @barcode 
And convert(varchar(10), entrydate, 120) like @year + '-07-%' 

Select * 
From #timesheet 
Where barcode = @barcode 
And datepart(year,entrydate) = cast(@year as int) 
And datepart(month,entrydate) = 7 
+0

在sqlfiddle中創建架構相當有幫助 – Mohsin