日期:2014-05-17  浏览次数:20777 次

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

------解决方案--------------------
搜索动态sql看看……
------解决方案--------------------
1. 用动态SQL
2. 所有列全取出来,然后前台处理
3. 使用decode函数
4. 使用case when语法
------解决方案--------------------
不用这么麻烦,用 sysdate 就可以查询出当天。

select to_char(SYSDATE,'DD') from dual

 ->

 where 日X = select to_char(SYSDATE,'DD') from dual

具体数值是否匹配,还需要楼主自行研究一下。 如果不行,就再转换一下。
------解决方案--------------------
--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'
------解决方案--------------------
动态日期的话,那把日期换成系统日期就行了

SELECT 商品NO
FROM TABLE1
WHERE 日X=to_char(sysdate,'YYYYMMHH')
------解决方案--------------------
select * from tablename t where t.day=to_char(sysdate,'yyyymmdd')
------解决方案--------------------
Oracle中应该有SQL Server中那样的Date函数把,看楼上都说是sysdate,那就简单了啥
SQL code

select * from tablename t where t.day=to_char(sysdate,'yyyymmdd')
注意时间格式'yyyymmdd'