将 NTP 字符串转换为日期时间
Covert NTP string to DateTime
我编写了一个函数,将 NTP 中的 date/time 字符串转换为 sql 数据时间格式。它工作得很好。
用法:
SELECT dbo.udf_ntp_converter('21:21:54.715 Greece Mon Aug 24 2015')
returns
2015-08-24 21:21:54
但是我的问题是有时字符串的开头带有点或星号,如下例所示:
*21:21:54.715 希腊 2015 年 8 月 21 日星期一
.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
我编写了一个函数,将 NTP 中的 date/time 字符串转换为 sql 数据时间格式。它工作得很好。
用法:
SELECT dbo.udf_ntp_converter('21:21:54.715 Greece Mon Aug 24 2015')
returns
2015-08-24 21:21:54
但是我的问题是有时字符串的开头带有点或星号,如下例所示:
*21:21:54.715 希腊 2015 年 8 月 21 日星期一
.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