我正在尝试将日期时间值转换为特定格式,但样式代码的noe似乎做了我想要的。我在样式代码上尝试了SQLUSA帖子,但没有一个是正确的。
我有一个列,其中日期/时间存储为 yyyy-mm-dd hh:nn:ss(24小时制)
我有一个选择声明我想要这个列,但是将日期表示为: mm / dd / yyyy hh:nn:ss AM / PM
我最接近的是:
CONVERT(varchar,[datetimecolum],22) AS [newcolumnname]
但这只给我一个2位数的年份,而不是一个世纪的年份(yyyy)。
有什么想法吗?我完全迷失了。 :(
答案 0 :(得分:2)
首先,datetime字段不是以特定字符串格式存储,而是以序列号存储。因此,您在屏幕上看到的不是存储的内容,而是数据库工具的默认日期呈现。其次,为什么要在SQL中执行此操作?如果要将值传递给应用程序,请从本机类型进行转换。第三,我不认为22是TSQL中的有效转换代码。查看http://msdn.microsoft.com/en-us/library/ms187928.aspx了解详情。
答案 1 :(得分:1)
来自:http://msdn.microsoft.com/en-us/library/ms187928.aspx
根据列出的所有其他格式判断,只需在格式编号中加100即可获得“与世纪”(yyyy)。
虽然根据文档(和我的测试),没有格式22(或122) - 所以你必须结合其他两种格式来获得你所需要的:
CONVERT(varchar,[datetimecolum],101) + ' ' + CONVERT(varchar,[datetimecolum],108) AS [newcolumnname]
答案 2 :(得分:0)
这是比我原来的笨笨,但是它有效,除了你不会在几小时或几分钟内得到前导零。您可以修改此代码以执行此操作,但它会变得非常混乱,所以我留给您; - )
换句话说,如果日期+时间是
3/1/2012 10:01:35 PM,
你会得到:
3/1/2012 10:1:35 PM
刺激,嗯?
无论如何,你走了。希望这可以帮助。
SELECT dt.ID,
CASE WHEN EXISTS(SELECT DATEPART(HH, mt.TheDate)
FROM MyTable AS mt
WHERE mt.ID = dt.ID
AND (DATEPART(HH, mt.TheDate)) > 12)
THEN
(SELECT
CONVERT(varchar,(MONTH(dt.TheDate))) + '/' +
CONVERT(varchar,(DAY(dt.TheDate))) + '/' +
CONVERT(varchar,(YEAR(dt.TheDate))) + ' ' +
CONVERT(varchar, DATEPART(HH, dt.TheDate)-12) + ':' +
CONVERT(varchar,(DATEPART(mi, dt.TheDate))) + ':' +
CONVERT(varchar,(DATEPART( ss, dt.TheDate))) + ' PM')
ELSE
(SELECT
CONVERT(varchar,(MONTH(dt.TheDate))) + '/' +
CONVERT(varchar,(DAY(dt.TheDate))) + '/' +
CONVERT(varchar,(YEAR(dt.TheDate))) + ' ' +
CONVERT(varchar, DATEPART(HH, dt.TheDate)) + ':' +
CONVERT(varchar,(DATEPART(mi, dt.TheDate))) + ':' +
CONVERT(varchar,(DATEPART( ss, dt.TheDate))) + ' AM') END As FullDate
FROM MyTable AS dt
答案 3 :(得分:0)
我认为这样做
select stuff(convert(varchar(20),getdate(),22),7,2,
CAST( DATEPART(yyyy,getdate()) as CHAR(4)))
这很接近,但没有AM PM
select convert(varchar(100),getdate(),22),
+ ' ' + CAST(DATEPART(mm,getdate()) as CHAR(2))
+ '/' + CAST( DATEPART(dd,getdate()) as CHAR(2))
+ '/' + CAST( DATEPART(yyyy,getdate()) as CHAR(4))
+ ' ' + CAST(DATEPART(HH,getdate()) as CHAR(2))
+ ':' + CAST(DATEPART(mi,getdate()) as CHAR(2))
+ ':' + CAST(DATEPART(ss,getdate()) as CHAR(2))
答案 4 :(得分:0)
你需要分两部分来做,你需要使用东西去除毫秒。如果找到另一种摆脱毫秒的方法,我会更新
SELECT CONVERT(VARCHAR(10), GETDATE(), 101)+' '+STUFF(RIGHT(CONVERT(VARCHAR(26), GETDATE(), 109),14),9,4,'')
输出:09/13/2012 11:15:21PM
修改:如果您想在AM / PM之前留出空间,那么在内容中使用' '
代替''
SELECT CONVERT(VARCHAR(10), GETDATE(), 101)+' '+STUFF(RIGHT(CONVERT(VARCHAR(26), GETDATE(), 109),14),9,4,' ')
输出:09/13/2012 11:15:59 PM