0

我的日期列存储为 CHAR 和 YYYYMMDD 格式。我必须从此列中搜索的字符串是 MM/DD/YYYY 格式。我怎么能把它改成 YYYYMMDD。此外,如果我的参数被传递 NULL 到查询中,我不会在 WHERE 子句中包含 DOB 搜索

select * 
from ona 
  left join mnv on ona.xyz = mnv.xyz 
where (coalesce(to_date(mnv.DOB,'YYYYMMDD'),to_date('1901-01-01','YYYY-MM-DD')) OR '{BirthDate}' IS NULL)
4

1 回答 1

3

不建议将日期存储为字符串,主要是由于这个特殊原因。因此,如果可能,请尝试更改您的列数据类型,以避免将来发生这种情况。

现在,您可以通过将两个字符串都转换为日期,使用to_date函数来比较它。

select something from some_table where
to_date(date_Column,'YYYYMMDD')=to_date(search_value,'MM/DD/YYYY');

正如您在评论中所问的那样,也可以通过操纵字符串来做到这一点,但是我认为按日期进行比较会更快并且更不容易出错。

看到您的查询后更新。

您没有转换BirthDate为日期,也没有=在您的查询中进行比较。假设 BirthDate 是具有MM/DD/YYYY格式的字符串,请使用如下所示的内容。

select * from ona left join mnv on ona.xyz = mnv.xyz 
where
to_date(mnv.DOB,'YYYYMMDD') = to_date(BirthDate,'MM/DD/YYYY')
and mnv.DOB is not null 
and BirthDate is not null. 
于 2017-05-30T16:28:46.163 回答