Mysql 我想得到两个特定列之间的列的值

Mysql 我想得到两个特定列之间的列的值,mysql,sql,select,case,between,Mysql,Sql,Select,Case,Between,我有一个表,其中我必须选择两列之间的列的值。假设第1列、第2列和第3列位于表1中的第_列开始和第_列结束之间。根据需要添加列\u开始和列\u结束之间的列 表1 是否可以获取这些column1、column2、column3值 输出: 试试这个: SELECT CASE WHEN column_start < column_end AND column1 BETWEEN column_start AND column_end THEN column1 WHEN co

我有一个表,其中我必须选择两列之间的列的值。假设第1列、第2列和第3列位于表1中的第_列开始和第_列结束之间。根据需要添加列\u开始和列\u结束之间的列

表1

是否可以获取这些column1、column2、column3值

输出:

试试这个:

SELECT CASE WHEN column_start < column_end AND column1 BETWEEN column_start AND column_end THEN column1 
            WHEN column_end < column_start AND column1 BETWEEN column_end AND column_start THEN column1 
            ELSE NULL 
       END AS column1, 
       CASE WHEN column_start < column_end AND column2 BETWEEN column_start AND column_end THEN column2
            WHEN column_end < column_start AND column2 BETWEEN column_end AND column_start THEN column2 
            ELSE NULL 
       END AS column2,
       CASE WHEN column_start < column_end AND column3 BETWEEN column_start AND column_end THEN column3
            WHEN column_end < column_start AND column3 BETWEEN column_end AND column_start THEN column3 
            ELSE NULL 
       END AS column3
FROM table1;

如果我理解正确的话,我认为你不可能用一个查询就能做到。您可以尝试使用以下方法。在代码中添加了注释

SET @schema = 'database_name_here'; -- Database name
SET @table = 'table1';              -- Table name
SET @startColumn = 'column_start';
SET @endColumn = 'column_end';

-- First get the position of both columns
SELECT ORDINAL_POSITION FROM information_schema.COLUMNS 
    WHERE table_schema=@schema AND table_name=@table AND 
    column_name=@startColumn INTO @StartPosition;

SELECT ORDINAL_POSITION FROM information_schema.COLUMNS 
    WHERE table_schema=@schema AND table_name=@table AND 
    column_name=@endColumn INTO @endPosition;

-- get the column names from the position
SELECT GROUP_CONCAT(column_name) from information_schema.COLUMNS
    where table_schema=@schema AND table_name=@table
    AND ORDINAL_POSITION > @StartPosition AND ORDINAL_POSITION < @endPosition 
    INTO @colname;

-- create a sql statement prepare and execute
SET @query = CONCAT('SELECT ',@colname,' FROM ', @table);
PREPARE stmt FROM @query;
EXECUTE stmt;

你能给我们看看你想要的产品吗?您想要这些列的总和还是单个列本身?是否将BEVER要求应用于每一列?您可以从information_schema.COLUMNS获取列详细信息。提示:检查列的序号位置order@TimBiegeleisen我已经编辑了问题,并提到了所需的输出。请检查。如果0、1或2列不在列\u开始和列\u结束范围之间,会发生什么情况?@TimBiegeleisen它不应该为不在这两个指定列范围之间的列刷新结果。
SELECT column1, column2, column3
FROM yourTable
WHERE
    column1 > column_start AND column1 < column_end AND
    column2 > column_start AND column2 < column_end AND
    column3 > column_start AND column3 < column_end
SELECT CASE WHEN column_start < column_end AND column1 BETWEEN column_start AND column_end THEN column1 
            WHEN column_end < column_start AND column1 BETWEEN column_end AND column_start THEN column1 
            ELSE NULL 
       END AS column1, 
       CASE WHEN column_start < column_end AND column2 BETWEEN column_start AND column_end THEN column2
            WHEN column_end < column_start AND column2 BETWEEN column_end AND column_start THEN column2 
            ELSE NULL 
       END AS column2,
       CASE WHEN column_start < column_end AND column3 BETWEEN column_start AND column_end THEN column3
            WHEN column_end < column_start AND column3 BETWEEN column_end AND column_start THEN column3 
            ELSE NULL 
       END AS column3
FROM table1;
SET @schema = 'database_name_here'; -- Database name
SET @table = 'table1';              -- Table name
SET @startColumn = 'column_start';
SET @endColumn = 'column_end';

-- First get the position of both columns
SELECT ORDINAL_POSITION FROM information_schema.COLUMNS 
    WHERE table_schema=@schema AND table_name=@table AND 
    column_name=@startColumn INTO @StartPosition;

SELECT ORDINAL_POSITION FROM information_schema.COLUMNS 
    WHERE table_schema=@schema AND table_name=@table AND 
    column_name=@endColumn INTO @endPosition;

-- get the column names from the position
SELECT GROUP_CONCAT(column_name) from information_schema.COLUMNS
    where table_schema=@schema AND table_name=@table
    AND ORDINAL_POSITION > @StartPosition AND ORDINAL_POSITION < @endPosition 
    INTO @colname;

-- create a sql statement prepare and execute
SET @query = CONCAT('SELECT ',@colname,' FROM ', @table);
PREPARE stmt FROM @query;
EXECUTE stmt;