在 Sql 的 select 语句中将数字作为列名传递

san*_*kar 3 mysql

我的查询是这样的

select 5 from mytable_name;
Run Code Online (Sandbox Code Playgroud)

然后输出类似于列名 5,值 5 打印该表中存在的最大行数。任何人都可以告诉这个查询为什么这样工作的原因吗?

Mah*_*mal 6

任何人都可以告诉这个查询为什么这样工作的原因吗?

'5'您正在为表中的每一行选择一个字符串文字值:

select 5 from mytable_name;
Run Code Online (Sandbox Code Playgroud)

这很好用。因为在SELECT声明中你可以选择:

  • 列参考,
  • 字面值就像你的例子一样。
  • 功能。
  • 价值表达。
  • 选择表达式。

按照标准 SQL 1的定义:

在此输入图像描述

更新:

但是,如果您有一列的名称是数字(就像您的情况一样),则必须对其进行转义才能选择其中的值,如下所示:

 SELECT `143` FROM Table1;
Run Code Online (Sandbox Code Playgroud)

这将选择该列中的所有行143

但是这个:

 SELECT 143 FROM Table1;
Run Code Online (Sandbox Code Playgroud)

将为表中找到的每一行选择字符串文字 143。

请注意:如果可能,尽量不要以这种方式命名这些列,建议也是最佳实践,不要这样做。

SQL 小提琴演示


更新2:

请注意,如果您选择143'143',甚至"143"这将选择文字值143而不是列日期。以下是相同的:

SELECT 143 FROM Table1;
SELECT '143' FROM Table1;
SELECT "143" FROM Table1;
Run Code Online (Sandbox Code Playgroud)

所有这些SELECT都不会选择列中的数据,它们将选择文字值143而不是列数据。看这个演示:

演示

您必须用两个转义列名称:

``
Run Code Online (Sandbox Code Playgroud)

像这样:

SELECT `143` FROM table1;
Run Code Online (Sandbox Code Playgroud)

不是:

SELECT '143' FROM table1'
Run Code Online (Sandbox Code Playgroud)

就像我在这里所做的那样:

正确的演示


1图片来自:普通人的 SQL 查询