Введите introspection в запросе mysql

#mysql #sql

#mysql #sql

Вопрос:

Есть ли функция, mysql которая сообщает, к какому типу относится вычисляемое выражение / столбец / литерал в запросе? Я имею в виду не информационную схему, а что-то вроде:

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

И я бы получил что-то вроде:

 VARCHAR      --      INT64          --      DATE
 

Это в основном для целей отладки.

Комментарии:

1. Нет, AFAIK не существует.

Ответ №1:

Нет, для того, что вы описываете, нет функции.

Самое близкое к тому, о чем вы говорите, — это использование клиента MySQL с --column-type-info возможностью отображения метаданных результирующего набора.

Но это не поможет вам, если вы используете SQL программно.

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

Вывод:

 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)
 

Комментарии:

1. спасибо, как вы добавляете --column-type-info в запрос? В вашем запросе я не вижу никаких дополнительных утверждений.

2. Это не часть SQL-запроса. Это опция в командной строке для клиента mysql. См. dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html