Как создать имена столбцов SQL, заключенные в квадратные скобки

Мне интересно, есть ли команда SQL, которая позволит мне заключать скобки [] вокруг существующих имен столбцов.

Например, в MyTable у меня есть столбцы с названиями 1, 2, 3, 4. Я хочу изменить их так, чтобы их новые имена столбцов были [1], [2], [3], [4].

Есть ли оператор SQL, который позволяет мне это сделать?


person user1733172    schedule 09.10.2012    source источник
comment
Какую СУБД вы используете? Почему вы хотите, чтобы в столбцах были квадратные скобки?   -  person Taryn    schedule 10.10.2012
comment
Добро пожаловать в Stack Overflow. Задавая подобный вопрос о SQL, вы должны убедиться, что вы указали используемую СУБД (вероятно, MS SQL Server, но...). Кроме того, мне интересно, что вы подразумеваете под скобками вокруг имен столбцов. Предположительно, вы думаете о каком-то редакторе SQL. Насколько точный анализ вы ожидаете. Лично я думаю, что вам лучше выбрать более осмысленные имена столбцов; эти вызовут бесконечное горе, потому что 1 (особенно) - это число, которое может отображаться в SQL как число. Обратите внимание, что для ссылки на столбцы вы уже должны использовать [1] и т. д.   -  person Jonathan Leffler    schedule 10.10.2012
comment
Хотя я не вижу причин, по которым это было бы невозможно. Я бы определенно не советовал называть ваши столбцы 1..4. Эти имена совершенно неописательны, и если вы хотите хранить больше значений одного и того же типа, вам, вероятно, следует хранить их в строках, а не в столбцах.   -  person Wolph    schedule 10.10.2012
comment
Я пытаюсь собрать данные из MySQL в MATLAB. Я использовал: tbread('tablename', cols, vecs, '') для создания переменных MATLAB с именами столбцов таблицы и их данными внутри. Мне не удалось получить числовые имена столбцов и их данные. Я понимаю, что есть недостатки в использовании чисел для именования столбцов, потому что команды sql для их извлечения не работают, но я не могу изменить имена столбцов (поскольку я использую MySQL в качестве резервной копии для импортированных данных из другой источник). Я могу создавать команды SQL из MATLAB. Я решил добавить [] к именам столбцов, чтобы не повредить свои данные   -  person user1733172    schedule 10.10.2012
comment
я использую mym для интерфейса MySQL и MATLAB   -  person user1733172    schedule 10.10.2012
comment
столбцы на самом деле не 1..4. каждое имя столбца имеет около 11 номеров, которые соответствуют коду, который я пишу в Matlab. мне просто нужно получить все их данные!!!   -  person user1733172    schedule 10.10.2012


Ответы (3)


Скобки — это синтаксис SQL Server/T-SQL. Имена столбцов не имеют скобок как часть имени. Скобки просто используются при написании оператора SQL, чтобы имя столбца могло быть некоторым зарезервированным ключевым словом. Таким образом, вы можете иметь столбец с именем «таблица»:

CREATE TABLE [MyTable](
[Table] [nchar](10) NULL, 
[Column] [nchar](10) NULL, 
)
GO

SELECT [Table], [Column] from MyTable
GO
person pero    schedule 09.10.2012
comment
у меня есть 1000 столбцов с числовыми именами. я не могу их изменить, потому что я их не создавал. в любом случае я могу получить их все? - person user1733172; 10.10.2012

В SQL Server, я думаю, вы могли бы сделать что-то вроде этого:

select [1] as [[1]]], [2] as [[2]]] ...

Хотя выглядит странным требованием

person Abe Miessler    schedule 09.10.2012
comment
разве это не создаст таблицу со столбцами, у которых есть [имя_столбца]? как насчет того, чтобы сделать это с существующими столбцами - person user1733172; 10.10.2012

На сервере Sql это работает:

select 1 AS "[1]"

Это, конечно, выбирает буквальное целое число 1. Чтобы выбрать поле с именем 1, вам нужно сделать это:

select [1] AS "[1]"

Я согласен с комментаторами, вся идея кажется чреватой опасностью, но если вы имеете дело с устаревшими/проприетарными данными, иногда у вас нет выбора.

Если вы хотите сделать это автоматически, вы можете запустить следующий код (или превратить его в хранимую процедуру для повторного использования):

BEGIN
    DECLARE @Comma AS VARCHAR(2)
    DECLARE @Sql as VARCHAR(5000)
    DECLARE @Column AS VARCHAR(50)

    SET @Sql = 'SELECT '
    SET @Comma = ''

    DECLARE ColCsr CURSOR FOR
        SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'MyTable' 

    OPEN ColCsr
    FETCH NEXT FROM ColCsr INTO @Column

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @Sql = @Sql + @Comma + @Column + ' AS "[' + @Column + ']"'
        SET @Comma = ', '
        FETCH NEXT FROM ColCsr INTO @Column
    END
    CLOSE ColCsr
    DEALLOCATE ColCsr

    SET @Sql = @Sql + ' FROM MyTable'

    EXEC (@Sql)
END
person Chris Latta    schedule 09.10.2012
comment
есть ли такая команда, как select * AS [].... таким образом мне не нужно перечислять все имена столбцов? - person user1733172; 10.10.2012
comment
Нет, если вы переименовываете поля, вам придется делать это вручную. - person Chris Latta; 10.10.2012
comment
что, если бы я добавил @ в начало имени каждого столбца? - person user1733172; 10.10.2012
comment
Однако это легко достигается с помощью T-SQL - см. мой пример, который я добавил. Вы можете использовать @ или отформатировать имя поля по своему усмотрению. - person Chris Latta; 10.10.2012
comment
Хорошо, я вижу, вы пометили это с помощью MySQL. Это было бы удобно знать раньше. Мой код T-SQL предназначен для Sql Server, но я предполагаю, что в MySQL будет аналогичный способ. - person Chris Latta; 10.10.2012