Подстановочный знак имени столбца SQL

У меня есть таблица с 30+ полями, и я хочу быстро сузить выбор до всех полей, где имя столбца начинается с "Флаг".

select * Like Flag% from Table1

3 ответа

Решение

Вы захотите создать динамический запрос, как описано здесь: /questions/13894503/vyidelite-vse-stolbtsyi-kotoryie-nachinayutsya-s-xxx-ispolzuya-podstanovochnyij-znak/13894523#13894523

SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'Foods'
        AND table_schema = 'YourDB'
        AND column_name LIKE 'Vegetable%'

Это заявление SQL должно быть полезным. Вы можете упростить это, но это работает.

Edit2: я только что увидел ваш тег pervasive-sql. К сожалению, я никогда не работал с этим и не знаю, совместим ли синтаксис с MS SQL Server. Я приведу здесь свой ответ на случай, если он поможет другим, но хотел бы поделиться, что я проверил это с помощью SQL Server.

Изменить: функция SCHEMA_NAME не требуется. Вы можете заменить SCHEMA_NAME(schema_id) на имя вашей схемы в одинарных кавычках, но любой из них будет работать.

 SELECT t.name AS table_name,
      SCHEMA_NAME(schema_id) AS schema_name,
      c.name AS column_name
 FROM 
     sys.tables AS t
 INNER JOIN 
     sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
 WHERE 
      t.name = 'Table1' AND
      c.name Like 'Flag%'
 ORDER BY 
     c.name

или же

 SELECT t.name AS table_name,
      'MySchema' AS schema_name,
      c.name AS column_name
 FROM 
     sys.tables AS t
 INNER JOIN 
     sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
 WHERE 
      t.name = 'Table1' AND
      c.name Like 'Flag%'
 ORDER BY 
     c.name

Для этого вам потребуется запросить системные таблицы для столбцов, связанных с таблицей, и отфильтровать их по вашему желанию. Оттуда поместите их в таблицу переменных и создайте CSV из столбцов. Оттуда вы можете динамически построить ваш запрос по мере необходимости. Приведенный ниже пример должен помочь вам начать.

DECLARE @tableName VARCHAR(100) = 'dbo.SomeTable'
DECLARE @columnNames TABLE
(
    Id INT IDENTITY PRIMARY KEY,
    ColumnName VARCHAR(100)
)

--Grabs all of the columns into a variable table
INSERT INTO @columnNames (ColumnName)
SELECT
    [name]
FROM sys.columns
WHERE
    [object_id] = OBJECT_ID(@tableName)
AND
    [name] LIKE '%Flag'

DECLARE @columns VARCHAR(1000)

--Creates a CSV of columns
SET @columns =
    STUFF(
    (
        SELECT
            ',' + ColumnName
        FROM @columnNames
        FOR XML PATH(''))
    ,1,1,'')

DECLARE @selectStatement NVARCHAR(4000) = CONCAT('SELECT ', @columns, ' FROM ', @tableName)

PRINT @selectStatement
EXEC @selectStatement 
Другие вопросы по тегам