R: Determine the SQL data type of an object

dbDataType {DBI} | R Documentation

## Determine the SQL data type of an object

### Description

Returns an SQL string that describes the SQL data type to be used for an object. The default implementation of this generic determines the SQL type of an R object according to the SQL 92 specification, which may serve as a starting point for driver implementations. DBI also provides an implementation for data.frame which will return a character vector giving the type for each column in the dataframe.

#### Methods in other packages

- `DBI::dbDataType("DBIObject")`

### Usage

    dbDataType(dbObj, obj, ...)

### Arguments

`dbObj` | A object inheriting from DBIDriver or DBIConnection
`obj` | An R object whose SQL type we want to determine.
`...` | Other arguments passed on to methods.

### Details

The data types supported by databases are different than the data types in R, but the mapping between the primitive types is straightforward:

- Any of the many fixed and varying length character types are mapped to character vectors

- Fixed-precision (non-IEEE) numbers are mapped into either numeric or integer vectors.

Notice that many DBMS do not follow IEEE arithmetic, so there are potential problems with under/overflows and loss of precision.

### Value

`dbDataType()` returns the SQL type that corresponds to the `obj` argument as a non-empty character string. For data frames, a character vector with one element per column is returned. An error is raised for invalid values for the `obj` argument such as a `NULL` value.

### Specification

The backend can override the `dbDataType()` generic for its driver class.

This generic expects an arbitrary object as second argument. To query the values returned by the default implementation, run `example(dbDataType, package = "DBI")`. If the backend needs to override this generic, it must accept all basic R data types as its second argument, namely logical, integer, numeric, character, dates (see Dates), date-time (see DateTimeClasses), and difftime. If the database supports blobs, this method also must accept lists of raw vectors, and blob::blob objects. As-is objects (i.e., wrapped by `I()`) must be supported and return the same results as their unwrapped counterparts. The SQL data type for factor and ordered is the same as for character. The behavior for other object types is not specified.

All data types returned by `dbDataType()` are usable in an SQL statement of the form `"CREATE TABLE test (a ...)"`.

### See Also

Other DBIDriver generics: `DBIDriver-class`, `dbConnect`, `dbDriver`, `dbGetInfo`, `dbIsValid`, `dbListConnections`

Other DBIConnection generics: `DBIConnection-class`, `dbDisconnect`, `dbExecute`, `dbExistsTable`, `dbGetException`, `dbGetInfo`, `dbGetQuery`, `dbIsValid`, `dbListFields`, `dbListObjects`, `dbListResults`, `dbListTables`, `dbReadTable`, `dbRemoveTable`, `dbSendQuery`, `dbSendStatement`, `dbWriteTable`

### Examples

    dbDataType(ANSI(), 1:5)
    dbDataType(ANSI(), 1)
    dbDataType(ANSI(), TRUE)
    dbDataType(ANSI(), Sys.Date())
    dbDataType(ANSI(), Sys.time())
    dbDataType(ANSI(), Sys.time() - as.POSIXct(Sys.Date()))
    dbDataType(ANSI(), c("x", "abc"))
    dbDataType(ANSI(), list(raw(10), raw(20)))
    dbDataType(ANSI(), I(3))

    dbDataType(ANSI(), iris)

    con <- dbConnect(RSQLite::SQLite(), ":memory:")

    dbDataType(con, 1:5)
    dbDataType(con, 1)
    dbDataType(con, TRUE)
    dbDataType(con, Sys.Date())
    dbDataType(con, Sys.time())
    dbDataType(con, Sys.time() - as.POSIXct(Sys.Date()))
    dbDataType(con, c("x", "abc"))
    dbDataType(con, list(raw(10), raw(20)))
    dbDataType(con, I(3))

    dbDataType(con, iris)

    dbDisconnect(con)

[Package DBI version 0.8 Index]