如何在MS SQL中将DATETIME转换为CHAR

时间:2016-04-18 14:52:05

标签: sql-server-2008 tsql

我需要将MS SQL日期时间转换为特定格式:

MM/DD/YYYY HH:MM AMPM

这意味着必要时HH必须有一个前导零:03:25 PM而不是3:25 PM

此外,会议纪要与上午或下午之间应有空格。

我找不到其中一个与之匹配的转换代码。

如果重要,这是SQL Server 2008 R2。

5 个答案:

答案 0 :(得分:4)

使用新的FORMAT功能:

DECLARE @dt DATETIME = '2016-04-18 15:05:22'

SELECT FORMAT(@dt, 'MM/dd/yyyy hh:mm tt')
-- output: 04/18/2016 03:05 PM

可从SQL Server 2012获得。

参考:https://msdn.microsoft.com/en-us/library/ee634398.aspx
示例:http://sqlhints.com/2013/06/23/format-string-function-in-sql-server-2012/

答案 1 :(得分:1)

 SELECT CONVERT(NVARCHAR,GETDATE(),101) + ' ' + 
     CASE SUBSTRING(CONVERT(NVARCHAR,GETDATE(),100),13,1) WHEN ' ' THEN '0' ELSE SUBSTRING(CONVERT(NVARCHAR,GETDATE(),100),13,1) END +
     SUBSTRING(CONVERT(NVARCHAR,GETDATE(),100),14,4) + ' ' + RIGHT(CONVERT(NVARCHAR,GETDATE(),100),2)

我可以建议这段代码:

 DECLARE @OFDate DATETIME

 SET @OFDate = DATEADD(hh,13,GETDATE())

 SELECT CONVERT(NVARCHAR,@OFDate,101) + ' ' + 
 CASE SUBSTRING(CONVERT(NVARCHAR,@OFDate,100),13,1) WHEN ' ' THEN '0' ELSE SUBSTRING(CONVERT(NVARCHAR,@OFDate,100),13,1) END +
 SUBSTRING(CONVERT(NVARCHAR,@OFDate,100),14,4) + ' ' + RIGHT(CONVERT(NVARCHAR,@OFDate,100),2)

您可以使用它来抵消当前日期以证明它适用于多种情况。例如,当我现在使用数字0,1,12和13时,我得到:

04/18/2016 09:34 AM 04/18/2016 10:34 AM 2016年4月18日下午09:34 04/18/2016 10:34 PM

这意味着你可能猜到我的时区。

这是非常繁琐的代码。我不知道你能不能做得更好或更好,但它有望让你开始。我建议如果你在很多地方需要这个,但是在你的程序中没有很多访问权限,你可以使用一个函数来返回它。但是,如果您要在表格中使用许多不同的行,那么最好只是将不优雅,复杂的代码放入您的程序中。

答案 2 :(得分:0)

答案 3 :(得分:0)

SELECT CONVERT (VARCHAR, GETDATE(), 101) + ' ' + CONVERT (VARCHAR,CONVERT (TIME, GETDATE()))

使用

更改会话中的语言设置
SET LANGUAGE us_english

SELECT * FROM sys.syslanguages

答案 4 :(得分:0)

使用Microsoft Sql Server:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2016-04-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)