1

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

我有一个包含日期列的临时表。

使用转换实时数据的转换将日期插入临时表

例如:

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 '%') 

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

任何想法都是关于这些问题中的一个/两个。

提前致谢。

加雷斯

4

1 回答 1

2

那么你不需要转换为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'

数据测试

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

(我的字符集是 cp850)

于 2013-04-19T15:13:16.693 回答