我在检索我想要的数据时遇到了问题。我有一个包含各种信息的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
答案 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)