将NTP字符串转换为DateTime



我写了一个函数将NTP中的日期/时间字符串转换为sql dataTime格式。它工作得很好。

用法:

SELECT dbo.udf_ntp_converter('21:21:54.715 Greece Mon Aug 24 2015')返回

2015-08-24 21:21:54

然而,我的问题是,有时字符串在字符串的开头有一个点或星号,就像下面的例子:

*21:21:54.715希腊星期一Aug 21 2015

.21:21:54.715希腊2015年8月21日星期一

我不想使用REPLACE,因为它可能会省略毫秒分隔符。如何修改当前的函数来处理这个问题呢?

下面是我当前的函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[udf_ntp_converter] (@TimeStamp varchar (45))
    RETURNS varchar(20)
AS
    BEGIN
        DECLARE @result varchar(20);
        SELECT @TimeStamp = REPLACE(@TimeStamp,'*','')
        SELECT @result = CONVERT(VARCHAR(19), (CONVERT(datetime,RIGHT(@TimeStamp, 11))+CONVERT(datetime,LEFT(@TimeStamp,12))), 120)
        RETURN @result
    END

在开始时对*.添加一点检查。

ALTER FUNCTION [dbo].[udf_ntp_converter] (@TimeStamp varchar (45))
    RETURNS varchar(20)
AS
BEGIN
        DECLARE @result varchar(20);

 IF (LEFT(@TimeStamp ,1) IN ('*','.'))
     BEGIN
           SELECT @TimeStamp = RIGHT(@TimeStamp , LEN(@TimeStamp) - 1)
     END
  SELECT @result = CONVERT(VARCHAR(19), (CONVERT(datetime,RIGHT(@TimeStamp, 11))
                                             +CONVERT(datetime,LEFT(@TimeStamp,12))), 120)
        RETURN @result
END

最新更新