ODBC behavior

  • Release version: Zurich
  • Updated July 31, 2025
  • 3 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of ODBC behavior

    The ODBC driver enables ServiceNow customers to query their instance database from various client applications. It supports local processing of aggregate functions and provides mechanisms to handle time zone differences, display values, and query metadata effectively.

    Show full answer Show less

    Key Features

    • Aggregate Functions: The driver supports COUNT, SUM, MIN, MAX, and AVG functions locally. Activating the Aggregate web service plugin improves performance for these queries.
    • Date and Time Handling: Date/time values returned by the ODBC driver reflect the local time zone of the client machine, not the instance time zone. Customers must account for time zone differences between the ServiceNow instance and the machine hosting the ODBC driver to query timestamps accurately. Duration and timer fields are returned in UTC starting with ODBC version 1.0.10.
    • Display Values: For Choice, Reference, Duration, and Timer fields, an additional column prefixed with "dv" provides display values. These display values can be used directly in select statements and filter conditions, improving query efficiency by reducing the need for additional joins or lookups. Aggregate queries can also leverage display values in GROUP BY or WHERE clauses.
    • Metadata Queries: Users can query internal ODBC tables (oatables and oacolumns) to retrieve accessible tables and columns based on their read ACLs, facilitating discovery and dynamic query building.
    • Read Replica Routing: To reduce load on the primary database for CPU-intensive SELECT queries, ODBC calls can be routed to Read Replica databases by enabling the "odbc" flag in the Secondary DB Categories settings.
    • Field Length Configuration: The maximum field length for SQL queries is limited by the ServiceNow dictionary entry, but customers can increase this limit to prevent data truncation when necessary.

    Key Outcomes

    • Customers can efficiently run aggregate and detailed queries with optimized performance by leveraging local aggregation and the Aggregate web service plugin.
    • Understanding and managing time zone differences ensures accurate querying of date/time fields across different environments.
    • Using display value columns simplifies queries on reference and choice fields, improving readability and performance.
    • Metadata querying via internal ODBC tables empowers users to discover accessible data structures and build queries dynamically within their permissions.
    • Routing to Read Replica databases enhances system performance by offloading heavy query workloads from the primary database.
    • Adjusting field length limits provides flexibility to handle larger data fields without truncation issues.

    After testing the ODBC driver, you can use it to query your instance database from a variety of client applications.

    ODBC aggregate functions

    The ODBC driver attempts to download data and apply aggregate functions locally. The ODBC driver supports the following aggregate functions.

    • COUNT
    • SUM
    • MIN
    • MAX
    • AVG

    Activate the Aggregate web service plugin to improve the performance of aggregate queries through the ODBC driver.

    ODBC date and time values

    The instance and the machine on which the ODBC driver is installed may use two different time zones. Date and time values returned by the ODBC driver are in the local time zone of the application using the driver, not the ServiceNow instance time zone.

    Ensure that you query in accurate time zones for both the instance and the machine that hosts the ODBC driver. GlideRecord performs filtering based on the instance time zone, and the ODBC client is filtered based on the Windows time zone.

    For example, an instance is in Central Standard Time (CST), and the ODBC driver is installed on a machine that is in Pacific Standard Time (PST). An incident is created on the instance at 2014-05-20 10:00:00, and the time that the incident was created is displayed in the UI as 10:00:00 for users in both time zones. However, in order to successfully query this incident by creation date and time, a user on the machine in PST must query 2014-05-20 08:00:00 instead of 2014-05-20 10:00:00.

    Duration and timer type fields are returned using the UTC time zone, starting with ODBC version 1.0.10. See KB0583982 for details about this change.

    ODBC display values

    Some examples of how to use and work with ODBC display values are shown below.

    • Display values in Choice and Reference columns:

      When querying a column of type Choice, Reference, Duration, or Timer, an additional column with the prefix dv_ is available that contains the display value. For example, you can select dv_caller_id to return the sys_user.name display value of the reference field from an incident record without making another request to the sys_user table.

      Figure 1. Return the display value
      Return the display value
    • Display values in filter conditions:

      Display values can also be used in a filter condition. The ODBC driver optimizes the query condition and processes the filter on the server, for example, querying on the display value of sys_user for the caller_id field of an incident by using the dv_caller_id field name.

      Figure 2. Display values in filter conditions
      Display values in filter conditions
    • Display values in aggregate queries:

      Aggregate queries can also take advantage of display values if you specify them in the group by or where clause, for example, grouping on the caller_id field of an incident, as well as specifying a filter for it. The query is optimized by passing through to the server.

      Figure 3. Display values in aggregate queries
      Display values in aggregate queries

    Querying table and column names

    You can get a list of accessible tables and columns based on the read ACLs for the querying user.

    • The following query returns the names of all tables for which the querying user has read access:

      select * from oa_tables;

    • After you know the name of the table you want to query, you can query the names of all columns for which the user has read access. The querying user must have read access for both the table and the columns.

      select * from oa_columns where table_name=‘table_name’;

    Note:
    The oa_tables and oa_columns tables are internal ODBC tables. These tables are accessible only via the ODBC driver.

    Routing ODBC calls to Read Replica

    Query routing is done to take the load off the primary database for SELECT queries that take numerous DB CPU cycles on the primary DB. For more information, see Introduction to ServiceNow Read Replica Databases.

    For routing ODBC calls to Read Replica, go to All > Secondary Database > Secondary DB Categories and set odbc to true.