转换功能不适用于where子句

时间:2019-01-04 20:41:19

标签: sql sql-server

我有一个名为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'

3 个答案:

答案 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)