我试图从数据库表中的字段创建一个从 - 到日期时间范围。
不幸的是,字段不会保存为时间戳。
我有两个条目 - 午夜时间 - 约会…
如果要创建将某个整数转换为日期时间类型的手动转换函数,可以自己编写UDF(用户定义函数)。
create function todatetime(@mydate int, @mytime int) returns datetime as declare @year int, @month int, @day, @hour int, @minute int, @second @int declare @datestring varchar(50) select @year = @mydate / 365 + 1970 select @month = @mydate ... select @datestring = convert(varchar, @year + "-" + @month + ... return convert(datetime, @datestring) go
当然你必须增加闰年支持等,但是可行,它应该做的工作。
我尝试了一些选项,这个似乎适合我:
CONVERT( VARCHAR, DATEADD( DAY, time_captured.end_date, `DEC 31 1971` ), 104 ) || `` || RIGHT( `00` || CONVERT( VARCHAR, FLOOR(time_captured.end_time/60) ), 2 ) || `:` || RIGHT( `00` + CONVERT( VARCHAR, time_captured.end_time%60 ), 2 ) || `:00` >= CONVERT( VARCHAR, DATEADD( DAY, sp.start_date, `DEC 31 1971` ), 104 ) || `` || RIGHT( `00` || CONVERT( VARCHAR, FLOOR(sp.start_time/60) ), 2 ) || `:` || RIGHT( `00` + CONVERT( VARCHAR, sp.start_time%60 ), 2 ) || `:00`
这个数据库的制作方式非常奇怪。谢谢你的所有答案!
假设你将这两列命名为 DaysSince1970 和 HoursSinceMidnight ...
DaysSince1970
HoursSinceMidnight
然后你可以建立一个推断 datetime (不 timestamp )使用表达式
datetime
timestamp
dateadd(hh,HoursSinceMidnight,dateadd(dd,DaysSince1970,'1-jan-1970'))
但是,这是一个计算列,并且将会是 的 可怕 强> 对于索引搜索,所以你需要一些逻辑。
DECLARE @DaysSince1970 int , @HoursSinceMidnight int , @SearchDateTime datetime SELECT @DaysSince1970 = datediff(dd,'1-Jan-1970',@SearchDateTime) , @HoursSinceMidnight = datepart(hh,@SearchDateTime) -- search your table SELECT * FROM tablename WHERE DaysSince1970 = @DaysSince1970 AND HoursSinceMidnight = @HoursSinceMidnight
理想情况下,您的表将需要并索引 DaysSince1970 , HoursSinceMidnight 。
查找范围内的行将是对此的简单扩展,但请记住,一旦您检查多天,不要检查一系列“原始”时间,只需检查日期范围,然后使用我给出的第一种方法你要检查日期/时间范围。
Sybase中的timestamp列类型不是...关于时间和日期(看看这个 Sybase中神秘的'timestamp'数据类型是什么? )。
如果您希望能够按日期时间(组合日期和时间)过滤记录,那么您应该注意以下内容:
您还可以使用sybase的getdate()函数记录默认值,如下所示: datetime_field DATETIME默认getDate()
例如:
# Casting into a DATETIME from DATE and TIME fields CAST(date_field AS DATETIME) + CAST(time_field AS DATETIME) # Filtering against DATETIME SELECT * FROM MyTable WHERE datetime_field < CAST(date_field AS DATETIME) + CAST(time_field AS DATETIME)