【发布时间】:2013-07-21 11:38:08
【问题描述】:
我需要帮助将 integer 转换为 varchar。
我正在尝试编写一个接收ProfileID 和Currenttime 的过程;使用这两个值,它会找到 profileID 的开始时间并从中减去 currenttime
starttime 并返回 hours:minutes:seconds。
我做错了什么,有没有更好的方法来写这个?
谢谢。
CREATE PROCEDURE [dbo].[CalculateElaspedTime]
-- Add the parameters for the stored procedure here
@ProfileID nvarchar(10),
@CurrentDateTime datetime = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if @CurrentDateTime = CAST('' as datetime)
set @CurrentDateTime = GETDATE()
DECLARE @StartTime datetime;
DECLARE @ElaspedTime time;
DECLARE @hh int;
DECLARE @mm int;
DECLARE @ss int;
Declare @TimeString varchar
set @StartTime = (Select top 1 [DateTime] From Log WHERE ProfileID = @ProfileID);
set @hh = DateDiff(hour,@StartTime,@CurrentDateTime);
set @mm = DateDiff(minute,@StartTime,@CurrentDateTime)-60*@hh;
set @ss = DateDiff(second,@StartTime,@CurrentDateTime)-60*@mm;
set @TimeString = (Select CAST(@hh as varchar)); -- Fails Here
set @ElaspedTime = convert(datetime, cast(@hh as varchar) + ':' + cast(@mm as varchar) + ':' + cast(@ss as varchar));
INSERT INTO Log (ElaspedTime) Values (@ElaspedTime);
END
【问题讨论】:
-
错误信息是什么?
-
发生错误时@hh 的值是多少?顺便说一句,您对 ElapsedTime 的逻辑表明您不是指间隔。
-
@hh 的值 = 1。从字符串转换日期和/或时间时转换失败。
-
cast(@hh as varchar) 无法评估
-
您是否尝试过使用 nvarchar(10) 代替未指定长度的 varchar?
标签: sql sql-server type-conversion