视图输出(dd/mm/yyy)SQL Server上的日期筛选器
我从一个视图获取输出,该视图有一列视图输出(dd/mm/yyy)SQL Server上的日期筛选器,sql,sql-server,Sql,Sql Server,我从一个视图获取输出,该视图有一列CreatedDate,该列以dd/mm/yyyy格式返回。我想代表date筛选输出,但没有显示任何内容。有人能帮我吗 SQL Server代码: ;with CTE as ( select CreatedDate, UserID, UserName, SUM([CreditedAmount]) as CreditedAmount, SUM([TDSPercent]) a
CreatedDate
,该列以dd/mm/yyyy
格式返回。我想代表date筛选输出,但没有显示任何内容。有人能帮我吗
SQL Server代码:
;with CTE as
(
select
CreatedDate,
UserID,
UserName,
SUM([CreditedAmount]) as CreditedAmount,
SUM([TDSPercent]) as TDSPercent,
SUM([TDSAmount]) as TDSAmount,
SUM(ISNULL([ApplicationServicePercentage], 0)) as ApplicationServicePercentage,
SUM(ISNULL([ApplicationServiceAmount], 0)) as ApplicationServiceAmount,
SUM([CreditedAmount]) - SUM([DebitedAmount]) - SUM(ISNULL([TDSAmount], 0)) - SUM(ISNULL([ApplicationServiceAmount], 0)) as AmountToPay
from
[dbo].[vwGetPaymentStatement]
where
[Status] = 0
and UserStatus = 1
group by
UserID, UserName, CreatedDate
)
select
CreatedDate,
UserID, UserName,
CreditedAmount, TDSPercent, TDSAmount,
ApplicationServicePercentage,
ApplicationServiceAmount,
AmountToPay
from
CTE
where
AmountToPay is not null
and (UserID = @uid or UserName like '%' + @username + '%')
and (CreatedDate between @datefrom and @dateto)
如果它不起作用,尝试铸造到目前为止 (在@datefrom和dateto之间强制转换(CreatedDate作为datetime)
希望您已经将变量声明为datetime,并且不需要强制转换这些变量 根据您的评论和对其他答案的回复,我知道:
您的CreatedDate字段是一个
VARCHAR
CreatedDate字段包含的数据不是正确的日期 我首先运行CTE的定义,并添加一个帮助查找非日期值,如下所示:
select
CreatedDate,
UserID,
UserName,
SUM([CreditedAmount]) as CreditedAmount,
SUM([TDSPercent]) as TDSPercent,
SUM([TDSAmount]) as TDSAmount,
SUM(ISNULL([ApplicationServicePercentage], 0)) as ApplicationServicePercentage,
SUM(ISNULL([ApplicationServiceAmount], 0)) as ApplicationServiceAmount,
SUM([CreditedAmount]) - SUM([DebitedAmount]) - SUM(ISNULL([TDSAmount], 0)) - SUM(ISNULL([ApplicationServiceAmount], 0)) as AmountToPay
from
[dbo].[vwGetPaymentStatement]
where
[Status] = 0
and UserStatus = 1
and isdate(createddate) = 0 --- > Added this row to find the non-date values
group by
UserID, UserName, CreatedDate
一旦您弄清楚如何处理这些非日期值,您就应该没事了。除非@datefrom和@dateto变量的数据类型有问题。步骤1,请删除where子句并运行查询。如果您获得记录,请一次添加一个筛选器,直到停止获取记录。你添加的最后一件事将是罪魁祸首。嗨,丹,我在创建日期上有过滤器
CreatedDate
的数据类型是什么?如果不是日期/日期时间数据类型,那就是您的问题。当我尝试强制转换时,下面的错误消息引发了从varchar数据类型到日期时间数据类型的转换,导致值超出范围。如果删除where中的BEVER子句并显示CreatedDate“date”数据您将看到分配给createddate的值的日期格式不正确。我认为您是对的。主要输出来自转换(char(10),createdDate,103)格式的视图。这就是我不能过滤的原因吗?你必须像这样反转日期和月份:cast(子字符串(convert(char(10),createdDate,103),4,2)+'/'+left(convert(char(10),createdDate,103),2)+'/'+right(convert(char(10),createdDate,103),4)作为日期时间)
SELECT createddate,
userid,
username,
creditedamount,
tdspercent,
tdsamount,
applicationservicepercentage,
applicationserviceamount,
amounttopay
FROM cte
WHERE amounttopay IS NOT NULL
AND ( userid = @uid
OR username LIKE '%' + @username + '%' )
AND ( createddate BETWEEN CONVERT(VARCHAR, Cast(@datefrom AS DATETIME),
103) AND
CONVERT(VARCHAR, Cast(@dateto AS DATETIME
), 103)