我有一个数据,其中日期和时间以yyyymmdd_time(20161012_1528)格式显示。
我想将它转换为SQL Server DB中的日期时间为2016-10-12 15:28:00:00
有没有直接的方法来做这个。还是要创建一个自定义函数?
答案 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
)
)
)