我有一个名为SUBMISSION_DATE的日期时间字段,正在将其转换为MM / DD / YYYY格式。我正在使用SQL Server。
问题是当我使用SUBMISSION_DATE拟合数据时,没有看到预期的数据。
我正在使用上述查询输出创建一个表,并且在SUBMISSION_DATE应用where子句时,我无法获取正确的数据。
Select x.* from
(
Select Id, Convert(varchar,SUBMISSION_DATE_CX,101) as Sub_Date,
Total_Loan_Amount
FROM M
where SUBMISSION_DATE_CXis not null
) [x]
where [x].Sub_Date>= '1/1/2019'
答案 0 :(得分:0)
如评论中所述,您正在比较varchar
而非date
。这是差异的示例。
select 1 where '1/1/2019' > '12/29/2018'
select 1 where cast('20190101' as date) > cast('20181221' as date)
第一个是比较文字文本,第二个是比较日期。
您可以删除子查询,因为它在这里没有用,或者将where
子句添加到子查询中
Select x.* from
(
Select Id, Convert(varchar,SUBMISSION_DATE_CX,101) as Sub_Date,
Total_Loan_Amount
FROM M
where SUBMISSION_DATE_CXi >= '20190101'
) [x]
Select
Id,
Convert(varchar,SUBMISSION_DATE_CX,101) as Sub_Date,
Total_Loan_Amount
FROM M
where
SUBMISSION_DATE_CX >= '20190101'
答案 1 :(得分:0)
为什么不只写这个?
Select Id, Convert(varchar(255), SUBMISSION_DATE_CX, 101) as Sub_Date,
Total_Loan_Amount
from m
where SUBMISSION_DATE_CX >= '2019-01-01' ;
您的代码存在的问题是您正在执行 string 比较,而不是 date 比较。但是,所有这些多余的东西都是不必要的。简化查询应该可以满足您的要求。
答案 2 :(得分:0)
您必须比较日期而不是字符串:
Select x.Id, x.Sub_Date, x.Total_Loan_Amount from (
Select Id,
SUBMISSION_DATE_CX,
Convert(varchar,SUBMISSION_DATE_CX,101) as Sub_Date,
Total_Loan_Amount
FROM M
where SUBMISSION_DATE_CX is not null
) x
where x.SUBMISSION_DATE_CX >= DATEFROMPARTS(2019, 1, 1)