Fun with SQL
От | Josh Berkus |
---|---|
Тема | Fun with SQL |
Дата | |
Msg-id | web-819041@davinci.ethosmedia.com обсуждение исходный текст |
Список | pgsql-sql |
Folks, I just made some fun and interesting use of 'tricky" SQL I thought I would share, as it gives an example of both clever SQL and function usage. THE PROBLEM: One of my clients is reporting skipped invoice numbers in their database. At a glance, I can't find any. While the client uses numerical invoice numbers, invoice_no is a VARCHAR field to accomodate other schemes. How can I check for ALL skipped invoice numbers in the database? Searching for data that is *not* there, without a reference list to compare, is a challenge. THE ANSWER: Look for any invoice number that is not succeeded by the invoice number which is its immediate numerical successor. I will also have to do some type conversions to do math on a VARCHAR field. THE QUERY: SELECT (to_number(invoice_no, '99999')::INT4 + 1::INT4) as skipped FROM invoices WHERE ltrim(to_char((to_number(invoice_no, '99999')::INT4 + 1::INT4), '99999')) NOT IN (SELECT invoice_no FROM invoices); WHAT I GOT: skipped ------- 10519 10839 Note that 10839 is the *next* invoice number to be generated, and as such, not skipped. WHAT I TOLD THE CLIENT: "Hmmm, I can only see one skipped invoice in the last 350 you've run. This does not seem to be a chronic problem." -Josh Berkus ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus
В списке pgsql-sql по дате отправления: