我有一项工作任务是更新SQL数据库中的一些StartDateUtc和EndDateUtc字段。
客户服务人员给了我更新的唯一商品ID(耶!) 它应该是它的日期。问题是,他用以下格式给了我日期:
我需要以某种方式轻松地将这些日期转换为SQL格式(2007-05-04 01:34:11.933)。
是否有一些我不知道的内置SQL或.NET方法可以轻松地做到这一点?或者更好的是,一个允许我在datepicker中输入日期的网站,它会吐出SQL格式(这将是理想的)
答案 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,则可以使用正则表达式捕获组件。