sql根据名称类型选择列

时间:2016-08-11 13:57:25

标签: sql-server

我正在使用Microsoft SQL,我有一个表,其中列名称'INT001', 'INT002'一直到'INT300',但列不按特定顺序显示为上面的名称

我想只选择'INT001' to 'INT096'中的列,即300列中的97列,并且列中的列以随机顺序出现。

我甚至都不知道从哪里开始。

编辑:我不想在已经有可用的模式时输入97列名称。

2 个答案:

答案 0 :(得分:0)

在查询中无法执行此操作...您可以做的是动态生成查询;

你可以通过多种方式生成它......就像这样(只使用数字来构建列名);

DECLARE @QueryString as varchar(max);

SELECT @QueryString = 'SELECT ';

SELECT 
    @QueryString = COALESCE(@QueryString + '[INT' + TheNumber + '],', '')
FROM 
    (SELECT DISTINCT RIGHT('000'+CAST(number AS VARCHAR(3)),3) AS TheNumber FROM master..[spt_values] WHERE number BETWEEN 0 AND 96) numbers

SELECT @QueryString = left(@QueryString, len(@QueryString) - 1) + ' FROM [YourTableName]'

print @QueryString

给我们

SELECT [INT000],[INT001],[INT002],[INT003],[INT004],[INT005],[INT006],[INT007],[INT008],[INT009],[INT010],[INT011],[INT012],[INT013],[INT014],[INT015],[INT016],[INT017],[INT018],[INT019],[INT020],[INT021],[INT022],[INT023],[INT024],[INT025],[INT026],[INT027],[INT028],[INT029],[INT030],[INT031],[INT032],[INT033],[INT034],[INT035],[INT036],[INT037],[INT038],[INT039],[INT040],[INT041],[INT042],[INT043],[INT044],[INT045],[INT046],[INT047],[INT048],[INT049],[INT050],[INT051],[INT052],[INT053],[INT054],[INT055],[INT056],[INT057],[INT058],[INT059],[INT060],[INT061],[INT062],[INT063],[INT064],[INT065],[INT066],[INT067],[INT068],[INT069],[INT070],[INT071],[INT072],[INT073],[INT074],[INT075],[INT076],[INT077],[INT078],[INT079],[INT080],[INT081],[INT082],[INT083],[INT084],[INT085],[INT086],[INT087],[INT088],[INT089],[INT090],[INT091],[INT092],[INT093],[INT094],[INT095],[INT096] FROM [YourTableName]

使用sys.columns列出列名也会更容易也更好,但由于我没有你的表或时间来模拟它,我已经使用了简单的数字。

答案 1 :(得分:0)

您可以通过动态创建SQL来创建查询。

DECLARE @MAX INT = 97;
DECLARE @NUM INT = 1;
DECLARE @COLUMN NVARCHAR(500);
DECLARE @SQL NVARCHAR (1000) = 'SELECT ';

WHILE @NUM <= @MAX
BEGIN
    SET @COLUMN = RIGHT(REPLICATE(0, 3) + CAST(@NUM AS VARCHAR(3)), 3)
    SET @NUM = @NUM + 1;
    SET @SQL = @SQL + '[INT' + @COLUMN + '], '
END

SET @SQL = @SQL + 'FROM [TABLENAME]'

SELECT @SQL --This is just to see the query

获得查询后,您可以通过复制和粘贴执行查询,或者您可以使用:

EXEC sp_executesql @SQL