【问题标题】:Converting Datetime to SQL UTC将日期时间转换为 SQL UTC
【发布时间】:2016-05-20 21:35:44
【问题描述】:

我的工作任务是更新 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 方法可以轻松做到这一点?或者更好的是,一个允许我在日期选择器中输入日期并输出 SQL 格式的网站(这将是理想的)

【问题讨论】:

  • UTC 与时区有关,与日期显示的格式无关。
  • SELECT GETDATE() AS CurrentTime, GETUTCDATE() AS UTCTime 试试这个
  • 这些值有多少?
  • 为什么不直接动手呢?大概需要10分钟。 '2015-06-04 21:00:00' 表示 2015 年 6 月 4 日
  • 你可以做这样的事情。 select CONVERT(datetime, 'June 4, 2015 9pm') 请注意,您必须删除“th”并删除 10pm 部分。

标签: sql sql-server date datetime utc


【解决方案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,则可以使用正则表达式来捕获组件。

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2021-12-31
    • 2011-01-06
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多