Skip to content
Advertisement

Type introspection in mysql query

Is there a function in mysql that tells what type the evaluated expression/column/literal is in a query? I don’t mean the information schema, but something like:

SELECT
    TYPE('Washington') as literal_type,
    TYPE(IF(col='a', col, 2)) as expression_type,
    TYPE(col) as col_type
FROM table

And I would get something llike:

VARCHAR      --      INT64          --      DATE

This is mainly for debugging purposes.

Advertisement

Answer

No, there’s no function for what you’re describing.

The closest thing to what you’re talking about is using the MySQL client with the --column-type-info option to display result set metadata.

But that wouldn’t help you if you’re using SQL programmatically.

mysql> select 'Washington' as literal_type, if(d = 9, d, 2) as expression_type, t as col_type from mytable;

Output:

Field   1:  `literal_type`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       VAR_STRING
Collation:  utf8mb4_0900_ai_ci (255)
Length:     40
Max_length: 10
Decimals:   31
Flags:      NOT_NULL 

Field   2:  `expression_type`
Catalog:    `def`
Database:   ``
Table:      ``
Org_table:  ``
Type:       LONGLONG
Collation:  binary (63)
Length:     20
Max_length: 1
Decimals:   0
Flags:      BINARY NUM 

Field   3:  `col_type`
Catalog:    `def`
Database:   `test`
Table:      `mytable`
Org_table:  `mytable`
Type:       DATE
Collation:  binary (63)
Length:     10
Max_length: 10
Decimals:   0
Flags:      BINARY 


+--------------+-----------------+------------+
| literal_type | expression_type | col_type   |
+--------------+-----------------+------------+
| Washington   |               2 | 2020-11-21 |
+--------------+-----------------+------------+
1 row in set (0.00 sec)
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement