6

如何

select name,family from student where name="X" 

没有它的列名。

例如 :

select "column1","column2" from student where "column1"="x"

或者例如

select "1","2" from student where "1"="x"

“1”是第 1 列,“2”是第 2 列

我不想说列名。我只想说它的数字或其他.... 不厌倦选择 *。但这只是因为我不知道列名,但我知道它们在哪里。每次我想读取文件时,我的列名都会更改,但其数据相同,并且数据位于每个文件的相同列中。

4

6 回答 6

3

尽管您不能在 SELECT 语句中使用字段位置说明符,但 SQL 标准包括定义表字典的 INFORMATION_SCHEMA。这包括定义所有表的所有字段的 COLUMNS 视图。在此视图中,您可以使用一个名为 ORDINAL_POSITION 的字段来帮助解决此问题。

如果您查询

SELECT ORDINAL_POSITION, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TABLE'
ORDER BY ORDINAL_POSITION

然后您可以获得所需序数位置的列名。从那里您可以准备一个 SQL 语句。

于 2013-04-06T08:52:17.647 回答
1

如果它是一个字符串,你可以这样做:

Select Column1 + '' From Table

如果它是一个数字,你可以这样做:

Select Column1 + 0 From Table

如果是日期时间,您可以这样做:

Select dateadd(d, 0, Column1) From Table

同样对于其他数据类型..

于 2017-04-11T14:33:25.923 回答
1

您可以将临时表用作:

DECLARE @TB TABLE(Column1 NVARCHAR(50),...)
INSERT @TB
SELECT * FROM student 

然后使用它:

SELECT Column1 FROM @TB WHERE Column1='aa'
于 2017-04-13T11:52:00.960 回答
0

不,您不能在 SELECT 子句中使用序数(数字)位置。只有按您的顺序排列才可以。

但是您可以创建自己的列别名...

Select Column1 as [1] From Table
于 2013-04-06T07:56:11.880 回答
0

您可以使用别名:

SELECT name AS [1], family AS [2] FROM student WHERE name="X"
于 2013-04-06T07:56:16.770 回答
0

这是不可能的。不幸的是,他们没有考虑 table-valued 函数,因为 information_schema 不可用,所以祝你好运。

于 2015-11-25T18:19:35.977 回答