【发布时间】:2015-10-24 03:17:49
【问题描述】:
我有一个旧系统,它使用四个离散字段来捕获日期时间:一个用于日期(例如 2015 年 10 月 23 日),一个用于小时(例如,10),一个用于分钟(例如,45 ),一个用于子午线(A 或 P)。
我正在尝试在 MSSQL 2008 R2 中构建一个标量函数,该函数将上述所有字段作为参数并返回使用所有提供的值创建的日期时间值。
这是我目前所拥有的:
CREATE FUNCTION f_getTimeStamp (@date Date, @hour Varchar, @minute Varchar, @meridian Varchar)
RETURNS Datetime
AS
BEGIN
DECLARE @createdDateTime datetime
DECLARE @createdTime varchar
SELECT @createdTime = @hour + ':' + @minute +
CASE
WHEN @meridian = 'A' Then 'am'
WHEN @meridian = 'P' Then 'pm'
Else 'pm'
END
SET @createdDateTime = @date + CAST(@createdTime AS DATETIME)
RETURN @createdDateTime
END
我们的想法是获取创建时间所需的字段并将它们组合成一个看起来像时间值的字符串,然后将其添加到已经存在的日期字段中。
我目前在查询中收到以下错误:
从字符串转换日期和/或时间时转换失败。
我应该注意,在使用此函数的查询中,我只发送非空值。
非常感谢任何帮助。
谢谢。
【问题讨论】:
-
您作为参数传递的字段是否与您在函数中声明的数据类型相同?
标签: sql-server datetime