You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中按列名筛选并查询最新日期的表数据?

解决方案

你提供的SQL语句无法实现按列名筛选的需求,因为WHERE子句的作用是过滤表中的行数据,而非选择特定列名的列。针对你的需求,这里提供两种实现方式:

1. 静态列名查询(适用于固定App前缀场景)

如果明确要查询的App(比如App1)对应的列名,直接指定列名即可,搭配子查询获取最新的CollectDate行:

SELECT App1Red, App1Blue, App1Green, App1Yellow
FROM your_table_name
WHERE CollectDate = (SELECT MAX(CollectDate) FROM your_table_name);

2. 动态SQL查询(适用于需要灵活切换App前缀的场景)

如果需要根据输入的App前缀(比如App1/App2)自动匹配对应列,可以通过查询系统表获取列名,拼接动态SQL执行。以下是不同数据库的实现示例:

MySQL/MariaDB版本

-- 设置要查询的App前缀和表名
SET @app_prefix = 'App1';
SET @table_name = 'your_table_name';

-- 拼接动态SQL
SET @sql = CONCAT(
    'SELECT ',
    (SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ', ')
     FROM INFORMATION_SCHEMA.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE()
       AND TABLE_NAME = @table_name
       AND COLUMN_NAME LIKE CONCAT(@app_prefix, '%')),
    ' FROM ', @table_name, '
      WHERE CollectDate = (SELECT MAX(CollectDate) FROM ', @table_name, ')'
);

-- 执行动态SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SQL Server版本

-- 设置要查询的App前缀和表名
DECLARE @app_prefix NVARCHAR(50) = 'App1';
DECLARE @table_name NVARCHAR(100) = 'your_table_name';
DECLARE @sql NVARCHAR(MAX);

-- 拼接动态SQL
SELECT @sql = CONCAT(
    'SELECT ',
    STRING_AGG(COLUMN_NAME, ', '),
    ' FROM ', @table_name, '
      WHERE CollectDate = (SELECT MAX(CollectDate) FROM ', @table_name, ')'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
  AND COLUMN_NAME LIKE CONCAT(@app_prefix, '%');

-- 执行动态SQL
EXEC sp_executesql @sql;

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:20:28