【问题标题】:I want to get the values of the column which are between two specific columns我想获取位于两个特定列之间的列的值
【发布时间】:2016-03-24 20:54:46
【问题描述】:

我有一个表,我必须在其中选择两列之间的列值。假设column1column2column3table1 中的column_startcolumn_end 之间。 column_startcolumn_end 之间的列会根据需要添加。

table1

column_start | column1 | column2 | column3 | column_end
-------------------------------------------------------
     1       |    2    |    3    |    4    |     5
     8       |    5    |    6    |    4    |     2

是否可以获得这些column1column2column3 值?

输出:

 column1 | column2 | column3
----------------------------  
   2     |    3    |    4     
   5     |    6    |    4      

【问题讨论】:

  • 你能告诉我们你想要的输出吗?您想要这些列的总和还是各个列本身? “介于”要求是否适用于每一列?
  • 您可以从information_schema.COLUMNS 获取列详细信息。提示:检查ORDINAL_POSITION 的列顺序
  • @TimBiegeleisen 我已经编辑了问题并提到了所需的输出。请检查一下。
  • 如果 0、1 或 2 列不在 column_startcolumn_end 范围之间会怎样?
  • @TimBiegeleisen 对于那些不在这两个指定列范围之间的列,不应闪烁结果。

标签: mysql sql select case between


【解决方案1】:

如果我理解正确,我认为您无法通过单个查询来完成。您可以尝试使用以下内容。为代码添加了注释。

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;

【讨论】:

    【解决方案2】:

    试试这个:

    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;
    

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2014-04-24
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多