如何在SQL Server中选择没有列名的列?

8

how to

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

我不想说列名,只想说它的编号或其他...... 我不会因为选择*而感到累,只是因为我不知道列名,但我知道它们在哪里。我的列名随着我想读取文件而改变,但数据相同,并且每个文件中的数据都在相同的列中。


你尝试过使用 SELECT * 吗? - Aiias
1
@Aiias - 那是糟糕的建议。SELECT * 是不良实践。 - Oded
3
为什么你想使用序号而不是列名?这意味着如果列的顺序/编号发生变化(这是可能的),你的查询将不再返回你所期望的结果。 - Oded
我也遇到过这种情况。通常是在访问来自文件或其他不一致/不可预测的数据源时。有人可能会更改文件中的列标题,现在查询就无法正常工作了。 - FistOfFury
这是一个很好的问题,即使它可能永远没有一个好的答案。仍然值得投票支持。 - bkwdesign
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语句。


2
您可以使用临时表来实现以下功能:
DECLARE @TB TABLE(Column1 NVARCHAR(50),...)
INSERT @TB
SELECT * FROM student 

然后使用它:
SELECT Column1 FROM @TB WHERE Column1='aa'

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

Select Column1 + '' From Table

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

Select Column1 + 0 From Table

如果这是一个日期时间,你可以这样做:

Select dateadd(d, 0, Column1) From Table

同样适用于其他数据类型。

0

不可以在SELECT子句中使用序数(数字)位置,只能在Order by中使用。

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

Select Column1 as [1] From Table

0

你可以使用别名:

SELECT name AS [1], family AS [2] FROM student WHERE name="X"

0

这是不可能的。不幸的是,他们没有考虑到表值函数,因此无法使用information_schema,祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接