Sql server массив типа long, int
В поле таблицы sql server субд надо организовать массив int или long. Как такое сделать?
4
На этот вопрос нет просто и короткого ответа. Почитайте вот тут, но мой совет: лучше не заморачиваться. Заведите строковое поле и сериализуйте в него массив.
8
Какие действия подразумеваются с этим полем?
Если в самом сервере не нужно будет оперировать отдельными элементами массива, то я бы хранил массив в бинарном поле. Это более компактно и быстрее чем в строковом.
А если все таки операции с отдельными числами массива в sql потребуются, то лучше завести таблицу и хранить в отдельной записи одно значение, чем заморачиваться с разбором бинарного (или строкового — одинаково геморойно) поля.
3
Мы используем для работы с массивами в БД xml.
Скорее всего, долгий разбор xml, о котором пишет maxleo, связан с тем, что результат этого разбора после этого сразу использовался в неком запросе.
Sql Server автоматом не оптимизирует запросы, в которых используется функция OPENXML. Он выполняет их так, чтобы максимально её обойти. Отсюда могут быть тормоза. Чтобы их не было, результат выполнения функции OPENXML следует поместить во временную таблицу и уже её использовать в запросах. Объёмы данных, которые при этом могут не влезть в память, в xml не хранят, если возникает такая проблема, следует пересмотреть дизайн.
1
Можно объявить переменную табличного типа (тот же массив, но баз данных), и добавлять значения в нее, н.п.:
declare @myArray table(value int)
для добавления значений в нее:
insert into @myArray (value) values (1), (2), (3)
для выборки из нее:
select * from @myArray
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
mysql — Как правильно хранить данные в формате «МАССИВ» в SQL?
Вопрос задан
Изменён 7 лет 4 месяца назад
Просмотрен 7k раз
Как правильно или как обычно хранят данные в формате «МАССИВ» в SQL ? Массив типа String
- mysql
- sql
- sqlite
3
Массив в SQL чаще всего стоит хранить с отдельной таблице, по одному элементу массива в каждой строке, связанной с основной таблицей внешним ключом.
Т.е. если основная сущность лежит в таблицe SomeTable c PK SomeTableID, то массив можно положить в SomeTableArray вида:
ArrayValueID | SomeTableID (FK) | Value 1 | 1 | string1 2 | 1 | string2 3 | 2 | string3 4 | 2 | string4
Это добавит лишний запрос на чтение, но зато у вас будет нормально работать поиск. И намного проще будет проводить добавление новых элемента в массив.
Все другие варианты — хранение в виде строки (json/xml/csv) — вынудят вас при каждом поиске, например, string2, выбирать вообще все значения из базы в память и как-то их там парсить. Полноценно работать с ними на уровне БД не получится.
16
Один из вариантов, массив хранить в виде строки , добавляя символ-разделитель между каждым элементом массива. Например, массива из трех элементов
2 3 5
хранить в виде
2&3&5
При записи, мы сращиваем(splice) массив в одну строку и записываем ее в БД, при чтении мы читаем строку и делим строку на массив по разделителю(split).
3
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Массив в SQL | Полное руководство по операциям с массивами в SQL с примерами
Массив в языке структурированных запросов (SQL) можно рассматривать как структуру данных или тип данных, который позволяет нам определять столбцы таблицы данных как многомерные массивы. В основном они представляют собой упорядоченный набор элементов, в котором все элементы одного и того же встроенного типа данных расположены в смежных ячейках памяти. Массивы могут быть целочисленного типа, типа перечисления или символьного типа и т. д.
Как создать массив в SQL?
Чтобы понять создание массива в SQL, давайте сначала создадим таблицу product_details, которая содержит идентификатор продукта, название продукта, варианты и цены для демонстрационных целей. Мы можем использовать следующие операторы SQL для выполнения задачи.
Здесь мы успешно создали таблицу product_details с двумя вариантами столбцов/атрибутов и ценами, имеющими тип данных массива. «Вариации» имеют тип данных одномерного массива, а «цены» имеют тип данных многомерного массива. Одномерный массив обозначается типом данных элементов в массиве, за которым следует «[]», а многомерный массив обозначается «[][]».
Как вставлять элементы массива в SQL?
Элементы массива можно вставлять в массив, указывая их в фигурных скобках {}, разделяя каждый элемент запятыми. Вот пример, иллюстрирующий метод добавления элементов в массив в SQL. Давайте вставим детали в вышеупомянутую таблицу «product_details».
Части, выделенные «зеленым» цветом, представляют собой секции, иллюстрирующие вставку массива.
Теперь мы успешно вставили элементы в таблицу, а также в упомянутые массивы. Данные в таблице product_details, выполняющие вышеупомянутую вставку массива, выглядят примерно так.
Операции с массивами в SQL
В этом разделе мы обсудим некоторые основные операции с массивами, такие как доступ к элементу массива, использование элементов массива в поисковых запросах, изменение элементов массива и т. д. Итак, приступим.
Доступ к элементу массива
Доступ к массиву очень прост. Здесь мы показали массив под названием «Страны G7».
Чтобы дополнительно проиллюстрировать доступ к элементам массива, мы воспользуемся помощью таблицы «product_details».
Примеры реализации массива в SQL
Ниже приведены упомянутые примеры:
Пример #1
Найдите первый вариант молока с product_id = ‘MD1002’
В этом примере мы пытаемся проиллюстрировать доступ к элементам в единице -мерный массив.
Пример #2
Найти цену 500 г молока для продукта «AM1002»
В этом примере мы пытаемся проиллюстрировать доступ к элементам в многомерном массиве.
Порядок доступа к элементам в многомерном массиве аналогичен доступу к элементам матрицы, но единственное отличие состоит в том, что здесь элементы начинаются с индекса = 1 вместо индекса = 0, как в случае с матрицами.
Пример #3
Найдите product_id, для которого мы можем найти «двутонное» молоко
Этот пример иллюстрирует использование элементов одномерного массива при поиске в таблицах базы данных.
Пример #4
Найдите product_id, для которого 1 кг молока стоит «56» рупий
Этот пример иллюстрирует использование элементов многомерного массива при поиске в таблицах базы данных
Приведенные выше примеры очень полезны, если мы знаем размер или местоположение атрибутов в массиве. Но они становятся очень утомительными, когда размер массива становится большим. Итак, что же делать, чтобы избежать подобных ситуаций?
Мы можем использовать такие параметры, как ANY и ALL. Вышеупомянутые запросы SQL могут быть альтернативно записаны следующим образом
Мы видим, что результаты обоих запросов одинаковы. В качестве альтернативы, если вы не хотите использовать ЛЮБОЙ или ВСЕ, вы можете использовать функцию generate_script() в pgSQL.
Изменение или обновление элементов массива:
Пример #5
SQL-запрос для иллюстрации обновления всего массива
Мы успешно обновили массив вариантов в таблице product_details. Затем мы можем проверить, были ли внесены изменения, используя запрос SELECT.
Пример #6
SQL-запрос для иллюстрации обновления элемента массива
Мы успешно обновили массив цен в таблице product_details. Затем мы можем проверить, были ли внесены изменения, используя запрос SELECT.
Заключение
Массив — это структура данных, которая хранит элементы одного и того же встроенного типа данных в непрерывной области памяти. Массивы могут быть одномерными или многомерными. Они очень полезны, поскольку обеспечивают легкий доступ к элементам данных.
Рекомендуемые статьи
Это руководство по работе с массивами в SQL. Здесь мы обсудим введение в массив в SQL, как создать и вставить массив с примерами. Вы также можете ознакомиться с другими нашими статьями по теме, чтобы узнать больше —
- CUBE в SQL
- Spark SQL Dataframe
- Преимущества NoSQL
- JSON в SQL
Как использовать тип переменной массива в вопросе SQL
jiaxing
#1
Я заметил, что переменные шаблона редактора SQL имеют только четыре типа: текст, число, дата и фильтр полей. похоже, что он не может быть распознан как массив
, так как я могу использовать переменную массива в переменных шаблона SQL? спасибо :соб:
фламбер
#2
Привет, @jiaxing
Вам нужно будет выполнить кастинг в своем запросе. Когда вы выбираете Text, Metabase отправляет строку.
https://www.metabase.com/docs/latest/users-guide/13-sql-parameters.html
#3
да!тип фильтра может выбирать несколько значений, например массив. но как я могу позволить параметрам URL заменить значение типа фильтра?
Пробую вот так
http://10.50.125.141:30033/public/dashboard/040f35e0-b3e7-4bd6-a008-833abb479175?lastStartTime=[value1,value2,value2]
и этот
9016 6 http:// 10.50.125.141:30033/public/dashboard/040f35e0-b3e7-4bd6-a008-833abb479175?lastStartTime=value1,value2,value2
оба не работают.
пожалуйста и спасибо
фламбер
#4
@jiaxing Вы используете фильтры полей, которые работают иначе, чем фильтры других типов. См. документацию.
https://www.metabase.com/learn/sql-questions/field-filters
цзясин
#5
Спасибо за ваше терпение! но есть еще один вопрос
, тогда я использую параметры URL на странице добавления нового вопроса, это работает. но на странице панели инструментов это не работает.
пожалуйста, забудьте о китайских словах и извините за мой английский.
сначала я создаю переменную организации на URL-адресе и устанавливаю ее 430112, вы можете увидеть таблицу
затем я меняю переменную, ставлю 430100, и вы видите, что таблица изменилась!
затем я добавляю вопрос на панель управления, вот так
поскольку значение переменной организации по умолчанию равно 430112, таблица такая же, как и первая img
затем я добавляю параметры URL, подобные этому
http://10.