sql问题

sql语句:select VRECEIPTCODE from so_sale where dbilldate >='2011-11-26' and dbilldate =< '2012-03-29'
下列语句报错:[Error Code: 936, SQL State: 42000] ORA-00936: 缺失表达式

[code="SQL"]select VRECEIPTCODE from so_sale where dbilldate >='2011-11-26' and dbilldate =< '2012-03-29'
:[Error Code: 936, SQL State: 42000] ORA-00936: 缺失表达式
[/code]

你的时间dbilldate 是不是字符型的?没有用Oracle本身的时间类型?

好像是=有问题?
dbilldate =< '2012-03-29'
改为:dbilldate <= '2012-03-29'
试一试。
在拼sql语句或者是java代码中=都在不等号右边。我记得是这样。

[code="java"]1.一下心血来潮,把部分Oracle对时间的一些处理,整理了一下,在这里分享一下(不足之处还请各位大牛指正)。

2.--因为Oracle的默认时间格式为 dd-mon-yy

3.SQL> select sysdate from dual;

4.SYSDATE

5.--------------

6.21-12月-10

7.

8.--所以如果要修改一下时间格式可以有以下两种方

9. --修改当前会话的时间格式

10.SQL> alter session set nls_date_format = 'yyyy-mm-dd';

11.会话已更改。

12.SQL> select sysdate from dual;

13.SYSDATE

14.----------

15.2010-12-21

16.

17. --修改当前系统的时间格式(需要重启数据库)

18.SQL> alter system set nls_date_format = 'yyyy-mm-dd' scope = spfile;

19.系统已更改。

20.SQL> select sysdate from dual; --还没有生效

21.SYSDATE

22.--------------

23.21-12月-10

24.

25.--查询当前系统的时间格式

26.SQL> show parameter nls_date_format;

27.NAME TYPE VALUE

28.------------------------------------ ----------- ------------------------------

29.nls_date_format string

30.

31.--查询当前时间

32.SQL> select sysdate from dual;

33.SYSDATE

34.-------------------

35.2010-12-21

36.--在当前时间的基础上延迟10分钟,计算方式:1天除以24小时=1小时,1小时除以6分钟=10分钟。

37.SQL> select sysdate + 1/24/6 from dual;

38.SYSDATE+1/24/6

39.-------------------

40.2010-12-21 20:43:37

41.

42.--在当前时间的基础上加一个月

43.SQL> select add_months(sysdate,1) from dual;

44.ADD_MONTHS(SYSDATE,

45.-------------------

46.2011-01-21 20:36:00

47.

48.--在当前时间的基础上减一个月

49.SQL> select add_months(sysdate,-1) from dual;

50.ADD_MONTHS(SYSDATE,

51.-------------------

52.2010-11-21 20:37:05

53.

54.--在当前时间见基础上加一年(减一年,参数为-12)

55.SQL> select add_months(sysdate,12) from dual;

56.ADD_MONTHS(SYSDATE,

57.-------------------

58.2011-12-21 20:40:26

59.

60.--获取当前时间,是星期几,第二个查询,星期天=1,星期一=2,以此类推。

61.SQL> select to_char(sysdate,'day') from dual;

62.TO_CHAR(S

63.---------

64.星期二

65.SQL> select to_char(sysdate,'d') from dual;

66.T

67.-

68.3

69.

70.--获取某个日期是星期几

71.SQL> select to_char(to_date('2010-08-09','yyyy-mm-dd'),'day') from dual;

72.TO_CHA

73.------

74.星期一

75.

76.--获取当前月的最第一天是星期几

77.SQL> select to_char(sysdate-to_number(to_char(sysdate,'dd')-1),'day') from dual;

78.TO_CHAR(S

79.---------

80.星期三

81.

82.--获取当前月的最后一天是星期几

83.SQL> select to_char(last_day(sysdate),'day') from dual;

84.TO_CHAR(L

85.---------

86.星期五

87.SQL> select to_char(last_day(sysdate),'d') from dual;

88.T

89.-

90.6

91.

92.--获取上个月的最第一天是星期几

93.SQL> select to_char(add_months(sysdate,-1)-to_char(sysdate-1,'dd'),'day') from dual;

94.TO_CHAR(A

95.---------

96.星期一

97.SQL> select to_char(add_months(sysdate,-1)-to_char(sysdate-1,'dd'),'d') from dual;

98.T

99.-

100.2

101.

102.--获取上个月的最后一天是星期几

103.SQL> select to_char(last_day(add_months(sysdate,-1)),'day') from dual;

104.TO_CHAR(L

105.---------

106.星期二

107.SQL> select to_char(last_day(add_months(sysdate,-1)),'d') from dual;

108.T

109.-

110.3

111.

112.--获取下个月的最第一天是星期几

113.SQL> select to_char(add_months(sysdate,1)-to_char(sysdate-1,'dd'),'day') from dual;

114.TO_CHAR(A

115.---------

116.星期六

117.SQL> select to_char(add_months(sysdate,1)-to_char(sysdate-1,'dd'),'d') from dual;

118.T

119.-

120.7

121.

122.--获取下个月的最后一天是星期几

123.SQL> select to_char(last_day(add_months(sysdate,1)),'day') from dual;

124.TO_CHAR(L

125.---------

126.星期一

127.SQL> select to_char(last_day(add_months(sysdate,1)),'d') from dual;

128.T

129.-

130.2

131.

132.--获取本周星期一的日期

133.SQL> select sysdate - to_char(sysdate -2,'d') from dual;

134.SYSDATE-TO

135.----------

136.2010-12-20

137.

138.--获取本周星期天的日期

139.SQL> select sysdate + 7 - to_char(sysdate -1,'d') from dual;

140.SYSDATE+7-

141.----------

142.2010-12-26

143.

144.--获取上周星期一的日期

145.SQL> select sysdate - 7 - to_char(sysdate -2,'d') from dual;

146.SYSDATE-7-

147.----------

148.2010-12-13

149.

150.--获取上周星期天的日期

151.SQL> select sysdate - to_char(sysdate -1,'d') from dual;

152.SYSDATE-TO

153.----------

154.2010-12-19

155.

156.--获取下周星期一的日期

157.SQL> select sysdate + 7 - to_char(sysdate -2,'d') from dual;

158.SYSDATE+7-

159.----------

160.2010-12-27

161.

162.--获取下周星期天的日期

163.SQL> select sysdate + 7 + to_char(sysdate-2,'d') from dual;

164.SYSDATE+7+

165.----------

166.2011-01-02

167.

168.--获取当前月共有多少天

169.SQL> select to_char(last_day(sysdate),'dd') from dual;

170.TO

171.--

172.31

173.

174.--获取今年有多少天

175.SQL> select sum(to_char(last_day(add_months(sysdate,-to_char(sysdate,'mm')+level)),'dd')) from dual connect by level <= 12;

176.SUM(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,-TO_CHAR(SYSDATE,'MM')+LEVEL)),'DD'))

177.-----------------------------------------------------------------------------

178. 365

179.

180.--获取本月的最后一天

181.SQL> select last_day(sysdate) from dual;

182.LAST_DAY(S

183.----------

184.2010-12-31

185.

186.--计算两个时间的差

187.SQL> select floor(sysdate-to_date('20100506','yyyy-mm-dd')) from dual;

188.FLOOR(SYSDATE-TO_DATE('20100506','YYYY-MM-DD'))

189.-----------------------------------------------

190. 232

191.

192.--获取从当年1月1日至今有多少天

193.SQL> select to_char(sysdate,'ddd') from dual;

194.TO_

195.---

196.358

197.

198.--判断当前时间是上午还是下午

199.SQL> select case when to_char(sysdate, 'hh24') >= 23 or to_char(sysdate, 'hh24') < 3 then '凌晨' when to_char(sysdate, 'hh24') >= 3 and to_char(sysdate, 'hh24') < 6 then '早晨' when to_char(sysdate, 'hh24') >= 6 and to_char(sysdate, 'hh24') < 8 then '上午' when to_char(sysdate, 'hh24') >= 8 and to_char(sysdate, 'hh24') < 11 then '中午' when to_char(sysdate, 'hh24') >= 11 and to_char(sysdate, 'hh24') < 13 then '下午' when to_char(sysdate, 'hh24') >= 13 and to_char(sysdate, 'hh24') < 17 then '傍晚' when to_char(sysdate, 'hh24') >= 17 and to_char(sysdate, 'hh24') < 19 then '晚上' when to_char(sysdate, 'hh24') >= 19 and to_char(sysdate, 'hh24') < 23 then '深夜' end from dual;

200.CASE

201.

202.--查找某个时间段内有多少个星期一

203.SQL> select count(1) from (select to_char(to_date('20101101', 'yyyy-mm-dd') + level, 'd') d from dual connect by level <= (select floor(to_date('20101201', 'yyyy-mm-dd') - to_date('20101101', 'yyyy-mm-dd')) from dual)) w where w.d=2;

204. COUNT(1)

205.----------

206. 4

207.

208.--获取当前时间或指定时间是所在年的第几周

209.SQL> select to_char(sysdate,'iw') from dual;

210.TO

211.--

212.51

[/code]

自己跟着我资料调整,要学会自己思考

dbilldate 什么类型的?

需要转一下·
[code="sql"]select VRECEIPTCODE from so_sale where dbilldate >=to_date('2011-11-26') and dbilldate =< to_date('2012-03-29')
[/code]

我测了一下,ORA-00936: 缺失表达式 应该是因为=<错了
[code="sql"]select VRECEIPTCODE from so_sale where dbilldate >='2011-11-26' and dbilldate <= '2012-03-29'
[/code]

如果dbilldate 是date类型,那么这个sql应改为:
[code="sql"]select VRECEIPTCODE from so_sale where dbilldate >=to_date('2011-11-26','yyyy-MM-dd') and dbilldate <=to_date('2012-03-29','yyyy-MM-dd')

[/code]

如果左右两边都有等号写成这样 最好:
[code="SQL"]select dbilldate,VRECEIPTCODE from so_sale where dbilldate between '2011-11-26' and '2012-03-29'[/code]

你的dbilldate 是date类型的吧,应该是这样的:

[code="sql"]
select VRECEIPTCODE from so_sale where dbilldate >= to_date('2011-11-26','yyyy-mm-dd') and dbilldate <= to_date('2012-03-29','yyyy-mm-dd')
[/code]
你试试