将字符串从MM / DD / YYYY转换为YYYYMMDD

时间:2017-05-30 16:01:23

标签: pervasive pervasive-sql

我的日期列存储为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)

1 个答案:

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