2014-07-04 152 views
1

我有一个varchar这是未来通过为以下格式:yyyy-dd-MM hh:mm:ssSQL自定义DateTime格式为datetime

我需要能够将其转换成一个有效的datetime,这将是最好的方法是什么?

编辑例如:

DECLARE @d varchar = '2014-17-01 12:00:00' 

SELECT CONVERT(DATETIME, @d, 103); 

回报

Msg 241, Level 16, State 1, Line 3 
Conversion failed when converting date and/or time from character string. 
+0

对不起,MSSQL(SQL Server 2012中) – TheGeekZn

+0

是否有可能有它通过发送一个某种形式的日期数据类型的,即'DATETIME','DATETIME2'等呢? –

+0

@a_horse_with_no_name疯狂的谷歌搜索不会说它确实 – TheGeekZn

回答

2

通过CONVERT

SELECT CONVERT(DATETIME, '2014-31-01 17:00:00', 103 /* British */); 

(No column name) 
2014-01-31 17:00:00.000 
+0

'DECLARE @d varchar ='2014-17-01 12:00:00' SELECT CONVERT(DATETIME,@ d,103);'获取转换错误 – TheGeekZn

+0

因为'DECLARE @d varchar ='2014-17- 01 12:00:00''是“'2”(无大小)你需要声明@d varchar(19)' –

+0

新手的错误 - 谢谢! – TheGeekZn

0

编辑添加SET DATEFORMAT。这解决了我的错误,并确保一切进入正确的桶。

SET DATEFORMAT ydm 

DECLARE @d VARCHAR(20) = '2014-17-01 12:00:00'; 
DECLARE @targetDate DATETIME = GETDATE(); -- Control Date 
DECLARE @passedDate DATETIME = CAST(@d AS DATETIME); 

SELECT @targetDate, @passedDate; 
+1

它可能“有效”,但取决于DATEFORMAT设置的有效性,可能会生成7月4日或4月7日的日期时间。尝试两次运行查询 - 一次在'set dateformat mdy'后面,一次在'set dateformat dmy'后面并比较结果。 –

+0

更新了答案,谢谢你的提醒。 – MystikSpiral

0

可以使用convert为:

DECLARE @TodayDate日期时间 SET @TodayDate = GETDATE() SELECT CONVERT(VARCHAR,@TodayDate,110)AS TodayDate

输出:

07-04-2014

希望它有帮助!

0

尝试交换日期和月份,然后PARSE将新字符串转换为datetime。

DECLARE @d varchar(50) = '2014-17-01 12:00:00' 

DECLARE @year varchar(10) = SUBSTRING(@d,1,4) 
DECLARE @day varchar(10) = SUBSTRING(@d,6,2) 
DECLARE @month varchar(10) = SUBSTRING(@d,9,2) 
DECLARE @time varchar(10) = SUBSTRING(@d,12,8) 

DECLARE @new_d varchar(50) = @year+'-'[email protected]+'-'[email protected]+' '[email protected] 

SELECT PARSE(@new_d AS datetime USING 'en-US') as Result