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,您可以使用正則表達式來捕獲組件。
UTC與時區有關,而不是日期的格式。 –
SELECT GETDATE()AS CurrentTime,GETUTCDATE()AS UTCTime試試這個 –
有多少個這樣的值? –