我的日期列存储为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)
答案 0 :(得分: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.