我想将我的日期时间数据恢复为以下格式:
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']));
答案 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