【问题标题】:Accessing column data with multiple dot in column name in MySql在MySql中访问列名中具有多个点的列数据
【发布时间】:2016-12-04 14:48:34
【问题描述】:

我正在尝试访问 MySql 中的一列数据,但问题是列名由几个点组成。 例如,列名是

DATA.COM.WITH.123.VALU

我知道这很奇怪,但列是如何定义的,我尝试了不同的方法,例如在列名的开头放一个点,但它不起作用

SELECT column AS '.DATA.COM.WITH.123.VALU' FROM table Datacom;

select DATA.COM.WITH.123.VALU from Datacom;

select "DATA.COM.WITH.123.VALU" from Datacom; 

然后我得到了这个错误

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 '.WITH.123.VALU from Datacom' at line 1

如果有人告诉我如何获取列数据,而列名之间包含这么多点。感谢您提前提供帮助。

【问题讨论】:

    标签: mysql sql select escaping


    【解决方案1】:

    最好的办法可能是从一开始就避免这个问题,并使用没有任何特殊字符的列名。如果这不可能,您可以使用反引号来转义列名:

    SELECT `DATA.COM.WITH.123.VALU` FROM Datacom; 
    -- Here^----------------------^
    

    【讨论】:

    • 感谢提示,我试过了,但没有用。从数据通信中选择 ^DATA.COM.WITH.123.VALU^; . .
    • @xee 你应该使用`而不是^
    • 我现在收到此错误:druid 错误:SQL 解析失败(org.apache.calcite.sql.parser.SqlParseException):第 1 行第 8 列的词法错误。遇到:“`”( 96), 之后: ""
    • 对我来说转义符号是“不是`
    【解决方案2】:

    使用反引号转义列名:

    SELECT column AS `.DATA.COM.WITH.123.VALU`
    FROM table Datacom;
    

    你可以用同样的方式访问它:

    SELECT dc.`.DATA.COM.WITH.123.VALU`
    FROM (SELECT column AS `.DATA.COM.WITH.123.VALU`
          FROM table Datacom
         ) dc
    

    注意,需要对列标识符本身进行转义,而不是列名与表名。

    然后,问问自己为什么这些时期如此重要。为什么不直接使用不需要转义的下划线?

    SELECT column AS DATA_COM_WITH_123_VALU
    FROM table Datacom;
    

    【讨论】:

    • 感谢提示,但反引号在这里不起作用。
    • @xee 。 . .您应该编辑问题并显示带有反引号的版本。那是 MySQL 中内置的转义字符,我不知道如何将其关闭 (dev.mysql.com/doc/refman/5.7/en/identifiers.html)。
    • 反引号工作正常。非常感谢你。 .your 和 Mureinik 的建议很有用,而且效果很好。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2018-05-02
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多