获取自定义日期时间格式

时间:2009-11-24 15:04:34

标签: sql-server datetime

我想显示日期时间,例如。 Dec 01,09 11:22:45 PM使用SQL查询

目前我的格式为:

 DATENAME(Month, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) -599266080000000000) / 864000000000) + SPACE(1) + DATENAME(d, (((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000) / 864000000000) +', ' + DATENAME(year, (((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000) /864000000000) + SPACE(1)+DATENAME (hour,(((MachineGroups.TimeAdded*10000000)+621355968000000000) - 599266080000000000) / 864000000000) + ':' +DATENAME (minute,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000) / 864000000000) + ':' +DATENAME (second,(((MachineGroups.TimeAdded*10000000)+ 621355968000000000) - 599266080000000000) / 864000000000) AS Expr2 

使用以上我得到例如。 2009年12月1日23:22:45

我尝试使用“MMM”和“yy”的cuatom formata,但它不起作用

任何建议??? 感谢

我无法使用上面的Datename属性来获得我想要的格式吗?

4 个答案:

答案 0 :(得分:0)

将值作为通用日期时间对象返回并在UI中对其进行格式化会更容易,更有效。

您从数据库返回格式化日期的动机是什么?

答案 1 :(得分:0)

除了AM / PM之外,这将为您提供一切:

声明@myDate datetime 设置@myDate = getdate() 选择LEFT(DATENAME(MM,@ myDate),3)+''+         右('0'+ DATENAME(DD,@ myDate),2)+','+         右(DATENAME(YY,@ myDate),2)+''+         convert(varchar,(DATEPART(hour,@ myDate)))+':'+ convert(varchar,(DATEPART(分钟,@ myDate)))+':'+ convert(varchar,(DATEPART(second,@ myDate) ))

有多种方法可以实现AM / PM值,其中包括:

的子串

SELECT convert(varchar,getdate(),109)

答案 2 :(得分:0)

除了MONTHNAME(您已经使用过),请查看DATEPART。它也离CONVERT格式9 [via CONVERT (VARCHAR(20), @datetime, 9)]不远,所以你也可以操纵它。

另一种选择是使用两个CONVERT ...这可以提供你想要的东西,但时间是24小时格式:

SELECT CONVERT(VARCHAR(20), @datetime, 107) + ' ' + CONVERT (VARCHAR(20), @datetime, 108)

使用不同的转换功能和一些字符串操作来获得12小时的AM / PM。或者做这样的事情:

SELECT CAST(DATEPART(hh, @datetime) - 12 AS VARCHAR)
        + ':' + CAST(DATEPART(mi, @datetime) AS VARCHAR) 
        + ':' + CAST(DATEPART(ss, @datetime) AS VARCHAR) 
        + CASE WHEN DATEPART(hh, @datetime) BETWEEN 0 AND 11 THEN ' AM' ELSE ' PM' END

这个或操纵CONVERT的输出都不是很好,但它们是你最好的选择。

HOWEVER: ,正如其他人所指出的那样,这通常更好地完成客户端/ UI端而不是SQL端。

答案 3 :(得分:0)

您可以找到所有受支持的SQL Server formats here

要选择等效于Dec 1, 09 11:22:45 PM的格式,您可以使用格式为7的日期:Mon dd, yy。时间可以从格式109汇编:mon dd yyyy hh:mi:ss:mmmAM (or PM)。结合:

select 
    convert(varchar(10), getdate(), 7) + 
    ' ' +
    stuff(
        substring(
            convert(varchar(32), getdate(), 109)
        ,13,14) -- Substring HH:mi:ss.mmmAM
    ,9,4,' ') -- Replace .mmm by one space

这应该打印:

Nov 24, 09  4:58:36 PM

094之间的两个空格中的第二个保留两个小时,如下午11:59:59。 :)