在SQL中解析多个DateTimes

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL中解析多个DateTimes相关的知识,希望对你有一定的参考价值。

所以我提取的文件有两个不同的起始时间格式的多个实例。一个开始时间采用zulu(UTC)格式,另一个采用标准dateTime格式。所以当我创建一个SELECT时,他们都必须通过它。

我的UTC startingTime的一个例子是2011-01-02T00:03:04.123Z

标准startingTime的一个例子是2011-Jan-20 01:15:37.000941 EST

我需要某种类型的dateTime.Parse可以处理它们并以相同的样式将它返回给我2011-Jan-20 01:15:37.000941 EST所在的第二个样式。

目前我正在使用DateTime.Parse(StartingTime).ToString("yyyy-MMM-dd HH:mm:ss.fff) As StartingTime"

这适用于解析UTC时间格式,但在尝试解析另一个时给出了错误。

有任何想法吗?

即使我没有让它回到我身上,就像这个2011-Jan-20 01:15:37.000941 EST我会采取一些显示三个毫秒的数字ex:2011-Jan-20 01:15:37.941 EST,这是我的代码现在做的。

答案

如果你只有这种日期,你可以试试这个。您可以在IF语句中添加更多类型!

DECLARE @func Func<string,string> = (s) => 

                                    DateTime d;
                                    if (DateTime.TryParse(s, out d))
                                    
                                        TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

                                        d = DateTime.SpecifyKind(d, DateTimeKind.Unspecified);

                                        DateTime cstTime = TimeZoneInfo.ConvertTime(d, cstZone, TimeZoneInfo.Utc);

                                        return cstTime.ToString("yyyy-MMM-dd HH:mm:ss.ffffff EST");
                                    
                                    return s;
;

@data = 
    SELECT data FROM 
        ( VALUES
        ("2011-01-02T00:03:04.123Z")
        ,("2011-Jan-20 01:15:37.000941 EST")

        ) AS T(data);


@result =
    SELECT @func(data) AS data FROM @data;

OUTPUT @result
TO "/test.txt"
USING Outputters.Tsv();

以上是关于在SQL中解析多个DateTimes的主要内容,如果未能解决你的问题,请参考以下文章

3.硬解析,软解析,软软解析

解析 JSON 数据并插入到 SQL Server 中的多个表中

MySQL内核源码解读-SQL解析之解析器浅析

使用php解析sql文件

Oracle初级优化sql

若sql语句中order by指定了多个字段,则怎么排序?