我有一个存储过程,对日期范围的需要:与转换日期存储过程
Create Procedure Search_PO
(
@usersID CHAR(10),
@poNo VARCHAR(20),
@poDateFrom Date,
@poDateTo Date,
)
As
Begin
If (@poNo = '')
Begin
Set @poNo = Null
End
If (@poDateFrom = '01/01/0001')
Begin
Set @poDateFrom = Null
End
If (@poDateTo = '01/01/0001')
Begin
Set @poDateTo = Null
End
Select * From PurchaseOrder p, Users u, Warehouse w
Where p.warehouseID = w.warehouseID
and w.usersID = u.usersID
and u.usersID = @usersID
and ((p.poNo like '%' + @poNo + '%') or @poNo Is Null)
and (p.poDate >= convert(date, @poDateFrom, 103) Or @poDateFrom Is Null)
and (p.poDate <= convert(date, @poDateTo, 103) Or @poDateTo Is Null)
End
这通常工作时,我已经选择日期,它是低于12(月数),它抛出我回来从varchar
转换的误差为date
我相信这是由于这样的事实:
- 在SQL Server的日期格式为MM/DD/YYYY 0在Visual Studio
- 日期格式为DD/MM/YYYY
我使用此代码作为一个独立的代码来检查,如果我的转换正在尝试:
select * from PurchaseOrder where poDate <= convert(date,'31/5/2017',103)
它的工作,但当我执行我的存储过程:
exec Search_PO 'US00000001','','1/1/0001','31/5/2017'
它返回我的转换错误AGA在。提前感谢您提供任何帮助。
为什么你不能以明确的格式,如'yyyymmdd' ? – iamdave
不要使用旧式连接语法! :) –
转换(日期,@日期,101) – Ravi