Is there any function in PostgreSQL that returns Boolean whether a given string is a date or not just like ISDATE() in MSSQL?
ISDATE("January 1, 2014")
Is there any function in PostgreSQL that returns Boolean whether a given string is a date or not just like ISDATE() in MSSQL?
ISDATE("January 1, 2014")
You can create a function:
create or replace function is_date(s varchar) returns boolean as $$
begin
perform s::date;
return true;
exception when others then
return false;
end;
$$ language plpgsql;
Then, you can use it like this:
postgres=# select is_date('January 1, 2014');
is_date
---------
t
(1 row)
postgres=# select is_date('20140101');
is_date
---------
t
(1 row)
postgres=# select is_date('20140199');
is_date
---------
f
(1 row)
begin ... exception block creates a subtransaction. So this can have a non-trivial performance impact. PostgreSQL really needs a generic way to invoke a datatype cast in a way that either (a) returns null instead of an exception on failure; or (b) invokes it as a test returning a boolean success/failure value.@ntalbs answer is good except in the case of NULL values. I don't want is_date to return true if I pass it a NULL value. This tweak gets around that issue:
create or replace function is_date(s varchar) returns boolean as $$
begin
if s is null then
return false;
end if;
perform s::date;
return true;
exception when others then
return false;
end;
$$ language plpgsql;
Checked is null date. Without creating a function, you can also. Var example = now()
select coalesce(extract(day from now()),'0') <> 0