如何在SQL Server中将字符串转换为日期?

时间:2015-12-08 08:48:34

标签: sql sql-server

如何在SQL Server中将此字符串转换为日期?

0112151647 -> 01.12.2015 16:47:00

Oracle中的P.S to_date('0112151647', 'ddmmrrhh24mi') call_date

我没有得到具体的格式。对我来说很重要的是转化为日期

3 个答案:

答案 0 :(得分:1)

据我所知,SQL Server没有提供任何可由Oracle to_date函数完全替换的函数。因此,您需要使用更多步骤来获得结果。以下链接显示了Oracle to_date函数和SQL Server替换方法之间的关联。 Here

您可能还需要使用其他一些T-SQL函数,如SubString或其他字符串函数。 详细了解他们here

这是一个可以帮助您实现答案的代码:

DECLARE @date AS CHAR(12) = '0112151647';
SELECT  SUBSTRING(@date, 1, 2) AS day ,
        SUBSTRING(@date, 3, 2) AS month ,
        SUBSTRING(@date, 5, 2) AS year ,
        SUBSTRING(@date, 7, 2) AS hour ,
        SUBSTRING(@date, 9, 2) AS minute ,
        CAST('20'+SUBSTRING(@date, 5, 2) + SUBSTRING(@date, 3, 2)
        + SUBSTRING(@date, 1, 2) + ' ' + ' ' + +SUBSTRING(@date, 7, 2)
        + ':' + SUBSTRING(@date, 9, 2) AS DATETIME);

答案 1 :(得分:0)

这样的事情应该可以解决问题。

DECLARE @Date CHAR(10);
SET @Date='0112151647';
SELECT CONVERT(datetime, '20' + SUBSTRING(@Date,5,2) + '-' + SUBSTRING(@Date,3,2) + '-' + LEFT(@Date,2) + ' ' + SUBSTRING(@Date,7,2) + ':' + RIGHT(@Date, 2), 20);

基本上,您需要将字符串重新格式化为SQL可以理解的格式之一(在此处列出:https://msdn.microsoft.com/en-gb/library/ms187928(v=sql.120).aspx#Anchor_3

所以我做了 - 只是将格式从'ddmmrrhh24mi'更改为 20 yyyy-mm-dd hh:mi:ss(24h)

答案 2 :(得分:0)

您可以在此处使用STUFF():

DECLARE @String VARCHAR(20) = '0112151647'

SELECT Cast(Stuff(Stuff(Stuff(Stuff(@String, 3, 0, '.'), 6, 0, '.20'), 11, 0, '  '), 15, 0, ':') AS DATETIME) 

输出:

DATE
2015-01-12 16:47:00.000

有关详情,请参阅here