【问题标题】:How to create SQL column names that have brackets around them如何创建带有括号的 SQL 列名
【发布时间】:2012-10-09 22:34:01
【问题描述】:

我想知道是否有一个 SQL 命令可以让我将括号 [] 括在现有的列名周围。

例如,在MyTable 中,我有标题为1234 的列。我想更改这些,以便它们的新列名称为[1][2][3][4]

是否有一条 SQL 语句可以让我这样做?

【问题讨论】:

  • 您使用的是什么关系型数据库?为什么要在列中包含方括号?
  • 欢迎来到 Stack Overflow。对于这样一个关于 SQL 的问题,您应该确保您确定您正在使用的 DBMS(可能是 MS SQL Server,但是......)。另外,我想知道你用括号括住列名是什么意思。大概,您正在考虑某种 SQL 编辑器。您期望的分析有多准确。就个人而言,我认为您最好选择更有意义的列名;这些将导致无尽的悲痛,因为1(尤其是)是一个可以在 SQL 中作为数字出现的数字。请注意,要引用这些列,您必须已经使用 [1] 等。
  • 虽然我看不出有任何理由说明这是不可能的。我绝对建议不要将您的列命名为1..4。这些名称完全没有描述性,如果您想存储更多相同类型的值,您可能应该将它们存储在行而不是列中。
  • 我正在尝试将数据从 MySQL 收集到 MATLAB。我一直在使用:tbread('tablename', cols, vecs, '') 使用表的列名及其数据创建 MATLAB 变量在里面。我一直无法检索数字列名及其数据。我意识到使用数字来命名列存在缺点,因为检索它们的 sql 命令不起作用,但我无法更改列名(因为我正在使用MySQL 作为从另一个来源导入数据的备份)。我可以从 MATLAB 制作 SQL 命令。我想我会在列名中添加 [],这样我就不会损坏我的数据
  • 我使用 mym 连接 MySQL 和 MATLAB

标签: mysql sql brackets


【解决方案1】:

方括号是一种 SQL Server/T-SQL 语法。列名称没有括号作为名称的一部分。括号仅在编写 SQL 语句时使用,以允许该列名可以是一些保留关键字。这样你就可以有一个名为“table”的列:

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

SELECT [Table], [Column] from MyTable
GO

【讨论】:

  • 我有 1,000 列带有数字名称。我无法更改它们,因为我没有创建它们。无论如何我可以检索所有这些吗?
【解决方案2】:

在 SQL Server 中,我猜你可以这样做:

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

这似乎是一个奇怪的要求

【讨论】:

  • 这会创建一个包含 [columnname] 列的表吗?如何对现有列执行此操作
【解决方案3】:

在 Sql Server 上,这可以完成工作:

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

【讨论】:

  • 有没有select * AS "[]"之类的命令....这样我就不用列出所有的列名了?
  • 不,如果您要重命名字段,则必须手动进行。
  • 如果我要在每个列名的开头添加 @ 会怎样?
  • 但是,使用 T-SQL 很容易实现 - 请参阅我添加的示例。您可以使用 @ 或根据需要格式化字段名称。
  • 好的,我看到你现在已经用 MySQL 标记了它。早点知道会很方便。我的 T-SQL 代码用于 Sql Server,但我认为在 MySQL 中会有类似的方法。
猜你喜欢
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2022-06-30
  • 1970-01-01
相关资源
最近更新 更多