SQL Server日期时间为12 AM / PM格式,没有毫秒

时间:2011-05-25 18:21:17

标签: sql-server

我想将我的日期时间数据恢复为以下格式:

mm / dd / yy hh:mi:ssAM

根据CONVERT documentation,与我的规格最匹配的是“131”

SELECT CONVERT(varchar, GETDATE(), 131)

但它与我的规格并不完全一致。


编辑: 我最终在我的应用程序层(即PHP)中进行了日期格式化。

就像使用strtotime函数生成UNIX时间戳并将其传递到date函数一样简单。

$date = date('m/d/Y g:ia', strtotime($row['date_time']));

3 个答案:

答案 0 :(得分:3)

试试这个:

SELECT CONVERT(varchar, GETDATE(), 101) + 
REPLACE(CONVERT(varchar, GETDATE(), 0),REPLACE(CONVERT(varchar, GETDATE(),107), ',',''),'')

这基本上使用了你想要的DATE方法,然后将它添加到你想要的时间部分。

答案 1 :(得分:2)

虽然我认为格式化应该是UI的一部分,但我想如果你真的需要它,下面的工作 - 我相信有一种更简单的方法可以做到这一点 - 但是让它成为一个UDF,并且只是使用它无论你想要什么样的查询。


declare @date varchar(50)
set @date = (select CONVERT(varchar, GETDATE(), 131))
set @date = (select LEFT(@date,len(@date) - 6) + ' ' + RIGHT(@date,2))
set @date = right(@date,LEN(@date) - 11)

select CONVERT(varchar, GETDATE(), 101) + @date

答案 2 :(得分:1)

您可以从DATEPART()中组装它,并从中创建用户定义的函数以便于重复使用。

这是我头顶未经测试的......试一试:

CREATE FUNCTION fnSpecDate()
 RETURNS VARCHAR(24)
AS
BEGIN

DECLARE @outData VARCHAR(24)

set @outData = 
       CONVERT(varchar,DATEPART(mm,GETDATE())) + "/"
       + CONVERT(varchar,DATEPART(dd,GETDATE())) + "/"
       + CONVERT(varchar,DATEPART(yy,GETDATE())) + " "
       + CASE WHEN DATEPART(hh,GETDATE()) > 12 
                THEN CONVERT(varchar,DATEPART(hh,GETDATE()) - 12)
              WHEN DATEPART(hh,GETDATE()) = 0
                THEN '12'
              ELSE CONVERT(varchar,DATEPART(hh,GETDATE()))
         END + ":"
       + CONVERT(varchar,DATEPART(mm,GETDATE())) + ":"
       + CONVERT(varchar,DATEPART(ss,GETDATE()))
       + CASE WHEN DATEPART(hh,GETDATE()) > 11 
                THEN "PM"
              ELSE "AM"
         END

RETURN @outData

END

然后在任何常规查询中,您都可以添加dbo.fnSpecDate() as myDate