将字符串转换为日期和时间

时间:2016-10-13 16:08:13

标签: sql sql-server tsql datetime sql-server-2014

我有一个数据,其中日期和时间以yyyymmdd_time(20161012_1528)格式显示。

我想将它转换为SQL Server DB中的日期时间为2016-10-12 15:28:00:00

有没有直接的方法来做这个。还是要创建一个自定义函数?

3 个答案:

答案 0 :(得分:7)

Declare @String varchar(25) = '20161012_1528'

Select cast(left(@String,8)+' '+Stuff(right(@String,4),3,0,':') as datetime)

或者

Select cast(Stuff(Replace(@String,'_',' '),12,0,':') as datetime)

返回

2016-10-12 15:28:00.000

答案 1 :(得分:0)

请尝试以下方法, 它需要使用一些日期时间和转换函数

declare @dt datetime
declare @str varchar(40) = '20161012_1528'

select @dt = 
    DATEADD(MI, CAST(right(@str,2) as int), 
        DATEADD(hh, cast(SUBSTRING(@str,10,2) as int), 
            CONVERT(datetime, left(@str,8))
        )
    )
select @dt

答案 2 :(得分:0)

我能找到的最接近的是日期时间格式112,它不考虑" _hhmm"。我强烈建议将转换放入T-SQL,因为优化器不能很好地处理UDF。

T-SQL看起来像: DECLARE @datetimestring nvarchar(max)=' 20161012_1528'

$ wget https://s3-ap-southeast-1.amazonaws.com/{sql-file} -O some-local-filename.sql

$ mysql [options]

mysql> source some-local-filename.sql

另一种选择是将字符串格式化为更短的预期日期格式。

SELECT
    dateadd(
        minute,convert(
            int,substring(
                @datetimestring,charindex(
                    '_',@datetimestring
                )+3,2
            )
        ),dateadd(
            hour,convert(
                int,substring(
                    @datetimestring,charindex(
                        '_',@datetimestring
                    )+1,2
                )
            ),convert(
                datetime, substring(
                    @datetimestring,0,charindex(
                        '_',@datetimestring
                    )
                ), 112
            )
        )
    )
相关问题