最近遇到了一个难题,一个SQL语句不会写,在线等牛人出现。问题是这样的:
数据表 TABLE1 有这些字段:仓库NO,商品NO,日1,日2,日3,。,日31  
现在已知仓库NO,以及今天的日期,要取得数据是商品NO。SQL语句大概是这样的:
SELECT 商品NO
FROM TABLE1
WHERE 日X=‘1’(X是当天的日期)
现在主要的问题就是日期是动态的,不知道怎样处理求高人啊

解决方案 »

  1.   

    1. 用动态SQL
    2. 所有列全取出来,然后前台处理
    3. 使用decode函数
    4. 使用case when语法
      

  2.   

    不用这么麻烦,用 sysdate 就可以查询出当天。select to_char(SYSDATE,'DD') from dual -> where 日X = select to_char(SYSDATE,'DD') from dual具体数值是否匹配,还需要楼主自行研究一下。 如果不行,就再转换一下。
      

  3.   

    --CREATE OR REPLACE PROCEDURE Prc_get_test is
    declare
      --假设仓库编码如下
      storageNum varchar2(10) := '430581001';
      --当前日期
      localDay varchar2(2) := '';
      
      strSql varchar2(1000) := '';
    begin
      --确定字段名称
      strSql := 'select to_char(sysdate,''d'') from dual';
      execute immediate strSql into localDay;
      strSql := 'SELECT 商品NO FROM TABLE1 WHERE 日' || localDay || '=''' || localDay || '''';
      dbms_output.put_line(strSql);
    end;
    --end Prc_get_test;--返回结果
    SELECT 商品NO FROM TABLE1 WHERE 日5='5'
      

  4.   

    动态日期的话,那把日期换成系统日期就行了SELECT 商品NO
    FROM TABLE1
    WHERE 日X=to_char(sysdate,'YYYYMMHH')
      

  5.   

    select * from tablename t where t.day=to_char(sysdate,'yyyymmdd')
      

  6.   

    Oracle中应该有SQL Server中那样的Date函数把,看楼上都说是sysdate,那就简单了啥
    select * from tablename t where t.day=to_char(sysdate,'yyyymmdd')
    注意时间格式'yyyymmdd'
      

  7.   

    问题已经解决了,用2楼的select case 的方法,虽然写的很麻烦。谢谢大家了~
    3~7楼的SQL语句都有一个问题,就是日X字段是变量,不好直接写吧