2016-05-20 275 views
0

我有一個工作任務來更新SQL數據庫中的一些StartDateUtc和EndDateUtc字段。將日期時間轉換爲SQL UTC

客戶服務人員給了我唯一的項目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數據格式(這將是理想的)

+1

UTC與時區有關,而不是日期的格式。 –

+0

SELECT GETDATE()AS CurrentTime,GETUTCDATE()AS UTCTime試試這個 –

+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,您可以使用正則表達式來捕獲組件。

相關問題