SQL将日期时间格式更改为特定样式

时间:2012-09-13 21:53:47

标签: sql database tsql

我正在尝试将日期时间值转换为特定格式,但样式代码的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)。

有什么想法吗?我完全迷失了。 :(

5 个答案:

答案 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]

SQLFiddle demo

答案 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