大家好我有Nvarchar(50)的列,我用它作为日期类型列,因为我现在使用波斯日历我想从两个不同的时间选择时间,例如显示我在2012/12之间的数据/ 18和2012/12/20我怎么能这样做请帮助,顺便说一下我想用这些动作的存储过程我尝试这个但它不会返回任何东西
ALTER proc [dbo].[sel_monthReport] @fdate nvarchar(50),@sdate nvarchar(50),@para nvarchar(50)
as
begin
declare @parametr nvarchar(50)
set @parametr=@para
select * from main where @parametr>=@fdate and @parametr <=@sdate
end
答案 0 :(得分:1)
假设您的main
表中有一列名为RecordDate,此列的类型为nvarchar,日期格式为yyyy / mm / dd。
在这种情况下,您不需要存储过程中的@para参数。把它改成这样的东西:
ALTER PROC [dbo].[Sel_monthreport] @fdate NVARCHAR(50),
@sdate NVARCHAR(50)
AS
BEGIN
SELECT *
FROM main
WHERE main.recorddate BETWEEN @fdate AND @sdate
END
请注意,这是一个NVARCHAR比较,因为您的日期以yyyy / mm / dd格式存储,因此它才有效。通常,更好的方法是比较DATETIME数据类型(更好的性能和更少的错误)。
您可以使用CONVERT函数将NVARCHAR值转换为DATETIME数据类型:http://msdn.microsoft.com/en-us/library/ms187928.aspx
答案 1 :(得分:0)
之前在StackOverflow上提出过类似的问题。正如您所说,开箱即用,SQL Server不支持波斯语。在此答案(How to convert datetime in persian in sql server)上的链接示例中,日期作为SQL Server日期格式存储在数据库中,但转换回/转换为波斯日期格式。您可以将这些UDF示例扩展为日期时间格式。
另一种选择是写一个CLR日期/时间函数来做同样的事情。有一个example on CodeProject。无论哪种方式,最好将SQL Server中的日期存储为文本格式。