如何从varchar获取日期

时间:2014-01-29 17:00:42

标签: sql-server sql-server-2008 tsql

我在检索我想要的数据时遇到了问题。我有一个包含各种信息的Varchar列。我想仅从该列中提取日期。但是,我没有成功。我使用下面的SQL(2008)来获取下面的数据,但我似乎只能在没有时间的情况下获取日期。显然,日期和时间处于不同的位置。希望你能帮忙。

  SELECT substring(Data, 8, 17)
   from mastInfo


9/25/2013 12:36:5
Jul  8 2013 11:40
9/25/2013 12:43:5

5 个答案:

答案 0 :(得分:3)

SELECT convert(date, Case When IsDate(substring(Data, 8, 17)) = 1
                          Then substring(Data, 8, 17)
                          Else NULL END) 
from mastInfo

由于您从一个字符串开始,它可能不代表有效日期。当字符串可以转换为日期时,使用IsDate函数将返回1。基本上,此代码会将那些可以转换的值转换为日期,并且对于那些无法转换为有效日期的值,将返回NULL。

答案 1 :(得分:1)

如果您使用的是SQL Server 2012或更高版本,则可以使用Try_Convert()

这是SQL Fiddle

这是一个例子(来自上面的SQLFiddle):

Select Try_Convert(datetime, DateAsString) As DateAsDateTime
  ,DateAsString
From SomeTable

结果如下:

DATEASDATETIME                      DATEASSTRING
September, 25 2013 12:36:05+0000    9/25/2013 12:36:5
September, 25 2013 12:43:05+0000    9/25/2013 12:43:5
July, 08 2013 11:40:00+0000         Jul 8 2013 11:40

答案 2 :(得分:0)

如果您想将其转换为日期时间,请使用:

SELECT CONVERT(Datetime, '2011-09-28 18:01:00', 120) -- to convert it to Datetime

如果你想要时间:

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), '2011-09-28 18:01:00', 100), 7))

如果你想要日期部分:

SELECT  CONVERT (DATE, GETDATE())

答案 3 :(得分:0)

什么版本的sql server?

你可以试试这个:

SELECT转换(日期,子串(数据,8,17))    来自mastInfo

答案 4 :(得分:0)

首先将Varchar转换为DateTime,之后再将其转换为所需日期格式的varchar,如101,102,103

试试这个:

 select convert(varchar(50),convert(datetime,'9/25/2013 12:43:5'),101)