Sybase - 在2个日期之间选择数据

时间:2013-02-07 19:36:32

标签: sybase-ase

关于sybase ASE 15.5我还有另一个(可能)非常容易回答的问题...不是我的热门话题: - (

我有一个临时表,其中有一个日期列。

使用转换来转换实时数据

,将日期插入到临时表中

来自

e.g:

2013-01-21 10:05:00.0
2013-01-28 08:03:00.0

21/01/2013
28/01/2013

using (CONVERT(VARCHAR(10), DATEFIELD, 103)

我遇到的问题是当我尝试使用日期范围过滤器从LIVE表中选择数据到临时表时:

WHERE (CONVERT(VARCHAR(10), DATEFIELD, 103) BETWEEN '21/01/13' AND '28/01/13') 

....当我运行此sybase时,只插入21/01/2013日期而不是28/01/2013。

.....此外,如果我使用29/01/2013作为结束日期,即

WHERE (CONVERT(VARCHAR(10), DATEFIELD, 103) BETWEEN '21/01/13' AND '29/01/13') 

我插入了两个:

21/01/2013
28/01/2013

进一步 - 如果我只运行21/01/13,即

WHERE (CONVERT(VARCHAR(10), DATEFIELD, 103) BETWEEN '21/01/13' AND '21/01/13') 

我没有得到任何回报。

有什么想法吗?

也许在sybase中使用BETWEEN并不好。为了清楚起见,字段从DATETIME转换为VARCHAR(10)。

我遇到的另一个问题是,当我有第一部分修复时,我希望能够通过例如通配符。

WHERE (CONVERT(VARCHAR(10), DATEFIELD, 103) BETWEEN '%' AND '%') 

....但目前这个也不起作用。

对这两个问题中的任何一个/两个都有任何想法。

提前致谢。

加雷

1 个答案:

答案 0 :(得分:1)

嗯,您不需要转换为varchar。我假设你的字段是日期时间。

convert(date, DATEFIELD, 103)

以后你可以: (TST cenario)

create table #temp1 (Datatst datetime)
insert into #temp1 values( '2013-01-21 10:05:00.0')
insert into #temp1 values( '2013-01-28 08:03:00.0')

select Datatst from #temp1
where convert(date,Datatst,103) between '21/Jan/13' AND '28/Jan/13'

Datatst

2013-01-21 10:05:00.0
2013-01-28 08:03:00.0

(我的字符集是cp850)