выбор двух столбцов со странными именами

#mysql

Вопрос:

У меня есть table schema такой:

 mysql> show columns from data;
 -------------------- ---------- ------ ----- --------- ------- 
| Field              | Type     | Null | Key | Default | Extra |
 -------------------- ---------- ------ ----- --------- ------- 
| ('Date', '')       | datetime | YES  |     | NULL    |       |
| ('Close', 'ABBV')  | double   | YES  |     | NULL    |       |
| ('Close', 'ABMD')  | double   | YES  |     | NULL    |       |
| ('Close', 'ABT')   | double   | YES  |     | NULL    |       |
| ('High', 'ABBV')   | double   | YES  |     | NULL    |       |
| ('High', 'ABMD')   | double   | YES  |     | NULL    |       |
| ('High', 'ABT')    | double   | YES  |     | NULL    |       |
| ('Low', 'ABBV')    | double   | YES  |     | NULL    |       |
| ('Low', 'ABMD')    | double   | YES  |     | NULL    |       |
| ('Low', 'ABT')     | double   | YES  |     | NULL    |       |
| ('Open', 'ABBV')   | double   | YES  |     | NULL    |       |
| ('Open', 'ABMD')   | double   | YES  |     | NULL    |       |
| ('Open', 'ABT')    | double   | YES  |     | NULL    |       |
| ('Volume', 'ABBV') | double   | YES  |     | NULL    |       |
| ('Volume', 'ABMD') | bigint   | YES  |     | NULL    |       |
| ('Volume', 'ABT')  | bigint   | YES  |     | NULL    |       |
| ('Symbol', '')     | text     | YES  |     | NULL    |       |
 -------------------- ---------- ------ ----- --------- ------- 
17 rows in set (0.00 sec)
 

Если я скажу:

 mysql> select DATE(`('Date', '')`) from data;
 ---------------------- 
| DATE(`('Date', '')`) |
 ---------------------- 
| 2010-08-10           |
| 2010-08-11           |
| 2010-08-12           |
| 2010-08-13           |
| 2010-08-16           |
...
 

Это работает. Но как мне запросить данные для Text или Double ?

Это не работает:

 mysql> select DATE(`('Date', '')`), DOUBLE(`('Close', '')`) from data;
 

Как и это:

 mysql> select DATE(`('Date', '')`) DOUBLE(`('Close', 'ABBV')`) from data;
 

И это не работает:

 mysql> select DATE(`('Date', '')`), DOUBLE(`('Close', 'ABBV')`) from data;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DOUBLE(`('Close', 'ABBV')`) from data' at line 1
 

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

1. Почему вы вызываете функции преобразования? Столбцы уже относятся к этому типу.

2. @Barmar, вы можете показать, какой должна быть инструкция запроса?

3. См. Функции приведения для функций преобразования типов данных в MySQL.

4. @Иван просто select `('Close', '')` from data; ; функция ДАТЫ ничего не делает, чтобы помочь найти ваше поле даты и времени (хотя она удаляет компонент времени).

Ответ №1:

Вам не нужно вызывать функцию преобразования, так как столбцы уже объявлены для этого типа.

Вы можете использовать псевдонимы в запросе, чтобы при выборе дать столбцам более простые имена.

 select `('Date', '')` AS date, `('Close', '')` AS close from data;
 

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

1. как мне получить свидание? Не работает: mysql> выбрать > ('Date', '') КАК дата, ('Close', 'ABBV') КАК близко от данных, где дата > ‘2021-01-01’;

2. Вы не можете использовать псевдонимы WHERE , вы должны использовать настоящее имя столбца WHERE `('Date', '')` > '2021-01-01'

Ответ №2:

Мой лучший совет-создать новую таблицу и вставить данные:

 create table data2 (
    date datetime,
    close_abbv double,
    . . .  -- repeat for all the columns
);

insert into data2
    select *
    from data;
 

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

1. Да, я думал, что каждый символ должен получить свою собственную таблицу

2. @Иван … Я не знаю, что ты на самом деле пытаешься сделать. Это предложение, чтобы у вас была разумная таблица для работы.

3. Нет, каждый символ определенно не должен иметь свою собственную таблицу, а должен храниться в другой строке, по одной строке на дату/символ, со столбцами дата, символ, закрытие, высокий, низкий, объем. (Не уверен, для чего предназначен ваш текстовый столбец)