18

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")
1

3 Answers 3

31

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)
Sign up to request clarification or add additional context in comments.

3 Comments

Note that each 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.
See also stackoverflow.com/a/6730401/5248144 for a more generic approach
I still needed this answer in 2020. "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." -Craig R. Holy heck, yes please.
2

@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;

Comments

-1

Checked is null date. Without creating a function, you can also. Var example = now()

select coalesce(extract(day from now()),'0') <> 0

1 Comment

I just tried this with select coalesce(extract(day from '2025-05-05'),'0') <> 0 and I got the error "ERROR: function pg_catalog.extract(unknown, unknown) is not unique".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.