#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. Нет, каждый символ определенно не должен иметь свою собственную таблицу, а должен храниться в другой строке, по одной строке на дату/символ, со столбцами дата, символ, закрытие, высокий, низкий, объем. (Не уверен, для чего предназначен ваш текстовый столбец)