leo*_*ora 10 sql-server runtime
我有一个表格,我想跟踪时间,所以有效的条目可能是:
最适合使用哪种字段类型.我显然可以使用varchar.但我认为可能有更好的东西,因为我想运行查询以总计多个记录的时间量.
Aar*_*ght 13
千万不能使用字符类型来存储日期/时间信息.
在SQL Server 2008中,您具有此time类型,如果您的时间间隔小于1天,则应使用此类型.在以前的版本中,或者如果需要存储更大的间隔,则必须使用datetime或smalldatetime(取决于您需要的精度).
另一种选择是选择时间单位 - 比如分钟 - 并且只使用一个int值来表示单位数.只需确保(a)您选择的单位实际上足够精确,以记录您需要跟踪的最小间隔,并且(b)实际数字类型足够大以容纳您需要跟踪的最大间隔.A smallint可能足以跟踪一天内的分钟数; 另一方面,跟踪10年时间范围内的毫秒数必须存储为a bigint.
只需使用整数来存储间隔,以秒为单位.DATEDIFF返回整数.编写一个将其转换为文本的函数.这个需要一些adjustmens(所以它显示"1分钟",而不是"1分钟"),但应该工作正常:
CREATE FUNCTION dbo.SecondsToText(@seconds int)
RETURNS VARCHAR(100)
AS
BEGIN
declare @days int;
set @days = @seconds/(3600 * 24);
declare @hours int;
set @hours = (@seconds - @days * 3600 * 24) / 3600;
declare @minutes int;
set @minutes = (@seconds - @days * 3600 * 24 - @hours * 3600) / 60;
set @seconds = (@seconds - @days * 3600 * 24 - @hours * 3600 - @minutes * 60);
RETURN
RTRIM(CASE WHEN @days > 0 THEN CAST(@days as varchar) + ' days ' ELSE '' END +
CASE WHEN @hours > 0 THEN CAST(@hours as varchar) + ' hours ' ELSE '' END +
CASE WHEN @minutes > 0 THEN CAST(@minutes as varchar) + ' minutes ' ELSE '' END +
CASE WHEN @seconds > 0 THEN CAST(@seconds as varchar) + ' seconds ' ELSE '' END)
END
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13539 次 |
| 最近记录: |