将Datetime转换为SQL UTC

时间:2016-05-20 21:35:44

标签: sql sql-server date datetime utc

我有一项工作任务是更新SQL数据库中的一些StartDateUtc和EndDateUtc字段。

客户服务人员给了我更新的唯一商品ID(耶!) 它应该是它的日期。问题是,他用以下格式给了我日期:

  • 2015年6月4日晚上9点至晚上10点
  • 2015年5月3日上午8点 - 下午1点
  • 2015年12月1日下午3点至晚上8点

我需要以某种方式轻松地将这些日期转换为SQL格式(2007-05-04 01:34:11.933)。

是否有一些我不知道的内置SQL或.NET方法可以轻松地做到这一点?或者更好的是,一个允许我在datepicker中输入日期的网站,它会吐出SQL格式(这将是理想的)

1 个答案:

答案 0 :(得分:1)

SQL或.NET CLR中没有简单的功能可以执行您想要的操作。这是纯SQL中的一种方法:

CREATE FUNCTION [dbo].[ConvertDate]
(
    @str    nvarchar(30)
)
RETURNS @Result TABLE 
(
    StartDate   datetime
,   EndDate     datetime
)
AS
BEGIN
    DECLARE @ThirdWhitespace    int          = CHARINDEX(' ', @str, CHARINDEX(' ', @str, CHARINDEX(' ', @str) + 1) + 1)
    DECLARE @FourthWhitespace   int          = CHARINDEX(' ', @str, @ThirdWhitespace + 1)
    DECLARE @FifthWhitespace    int          = CHARINDEX(' ', @str, @FourthWhitespace + 1)
    DECLARE @FirstComma         int          = CHARINDEX(',', @str)

    DECLARE @DateString         nvarchar(30) = STUFF(LEFT(@str, @ThirdWhitespace), @FirstComma - 2, 2, '')
    DECLARE @StartTimeString    nvarchar(10) = SUBSTRING(@str, @ThirdWhitespace + 1, @FourthWhitespace - @ThirdWhitespace - 1)
    DECLARE @EndTimeString      nvarchar(10) = SUBSTRING(@str, @FifthWhitespace + 1, 100)

    INSERT INTO @Result
    SELECT  CAST(@DateString AS datetime) + CAST(@StartTimeString AS datetime)
        ,   CAST(@DateString AS datetime) + CAST(@EndTimeString   AS datetime)
    RETURN 
END

用法:

SELECT      *
FROM        dbo.ConvertDate('May 3rd, 2015 8am - 1pm')

请注意,这非常挑剔。如果在字符串中的任何位置添加额外的空格,它将会中断。如果您可以使用.NET CLR,则可以使用正则表达式捕获组件。