2016-08-11 3 views
1

Я работаю в Microsoft SQL, и у меня есть таблица, где имена столбцов похожи на 'INT001', 'INT002' вплоть до 'INT300', но столбцы не отображаются в определенном порядке с именами выше.sql select columns на основе имени типа

Я хочу выделить только столбцы из 'INT001' to 'INT096' i.e. 97 столбцов из 300 столбцов и столбцы происходят в случайном порядке в таблице.

У меня даже нет подсказки, с чего начать.

Редактировать: Я не хочу вводить имена столбцов 97, если у них уже есть шаблон, который я могу использовать, если это возможно.

+0

Что случилось идти на 'выбрать INT001, INT002, INT003, ... INT096 от Table'? – vercelli

ответ

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 в список имен столбцов, но так как у меня нет столиков здесь или время, чтобы дразнить его у меня прошли с простыми номерами один.

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 
Смежные вопросы