#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