I need to calculate the time a ticket is open based on the business hours used within the SLA i.e. taking out weekends, nights etc.) I cannot see a function for doing this easily.
There is no official function available for this, either in SQL or reporting.
However, this Connect article is probably the best place to at least get started with this:
ServiceDesk - How To Get Accurate Age Descriptions in Your Reporting