Developer ToolsFree generatorPDF, Excel, Word exportManufacturing

Environmental Permit Expiry Alert SQL Query Generator

A missed renewal on an air, wastewater or waste permit can stop production or trigger a violation. This generator writes a SQL query that lists permits expiring inside a look-ahead window and shows the date by which the renewal application must be filed.

Fill in

Your own table. The default is a generic example, not a vendor table.

Generated code
Download:

SQL Server (T-SQL)

SELECT permit_no AS permit_no,
       permit_type AS permit_type,
       site_code AS site,
       expiry_date AS expires_on,
       DATEDIFF(day, CAST(GETDATE() AS date), expiry_date) AS days_left,
       DATEADD(day, -renewal_lead_days, expiry_date) AS renewal_must_file_by,
       owner_email AS owner_email
FROM env_permit
WHERE expiry_date <= DATEADD(day, 120, CAST(GETDATE() AS date))
ORDER BY expiry_date;

PostgreSQL

SELECT permit_no AS permit_no,
       permit_type AS permit_type,
       site_code AS site,
       expiry_date AS expires_on,
       (expiry_date - CURRENT_DATE) AS days_left,
       (expiry_date - renewal_lead_days) AS renewal_must_file_by,
       owner_email AS owner_email
FROM env_permit
WHERE expiry_date <= CURRENT_DATE + 120
ORDER BY expiry_date;

Flag permits already past the renewal filing date

-- Works in PostgreSQL. In SQL Server replace the date math with DATEADD as above.
SELECT permit_no, permit_type, expiry_date
FROM env_permit
WHERE (expiry_date - renewal_lead_days) < CURRENT_DATE
  AND expiry_date >= CURRENT_DATE
ORDER BY expiry_date;

Table and column names are generic placeholders. Replace them with your own schema and check the column data types. Test on a non-production copy first. Renewal lead times vary by permit and authority, so store the value per permit rather than assuming one number.

Want permit alerts inside your ERP?

Optional: we can look at how permit and compliance dates could be surfaced from your existing systems.

Optional. The tool and every export work without this. No spam.

How to use the generator

Enter the name of your permit table and the columns that hold the permit number, type, site, expiry date, renewal lead days and owner email. Set the look-ahead window and copy the query for your database. Schedule it in SQL Agent, pg_cron or your reporting tool and send the output to the permit owner and EHS manager.

  • Use a window longer than your longest renewal lead time
  • Store renewal lead days per permit
  • Send the result to a named owner, not a shared mailbox only

Why track the filing date and not just expiry

Many permits require the renewal application months before expiry. Title V air permits, for example, have defined renewal application windows, and many wastewater permits require submission well ahead of the end date. A query that only shows expiry gives a false sense of time. The renewal must file by column subtracts the lead days so the alert fires when action is actually needed.

Example

A permit with expiry 2027-03-31 and 180 renewal lead days has a filing deadline in early October 2026. With a 120 day window run on 2026-10-19 the permit would not appear in the first query, but the third query would flag it as already past the filing date. That difference is the reason the third block exists.

Common mistakes

Hardcoding one renewal period for every permit, leaving expired permits out of the list because the filter has no lower bound, and storing expiry dates as text so sorting breaks. Also confirm time zone and date type if you run the job on a server in a different region from the plant.

Frequently Asked Questions

Will this work with my ERP tables?

Only if you map the field names. The query uses generic names so you can point it at any permit table or view. Check your ERP data dictionary for the real table and column names before using it in production.

Which databases does it support?

It outputs T-SQL for SQL Server and PostgreSQL. MySQL, Oracle and others need small changes to the date functions, such as DATE_ADD in MySQL or sysdate arithmetic in Oracle.

How do I send the result as an email?

Schedule the query in SQL Server Agent with Database Mail, pg_cron with an external mailer, or your BI tool. Keep the recipient list in a table linked to the owner column so it updates when people change roles.

Should expired permits be included?

Yes, they should be visible. The first query includes anything with an expiry date at or before the window, which includes already expired permits, so they stay on the list until the record is updated.

If permits are tracked inside your ERP, maintenance or EHS module, we can help turn this query into a scheduled alert with the right owner and escalation.