我需要将MS SQL日期时间转换为特定格式:
MM/DD/YYYY HH:MM AMPM
这意味着必要时HH必须有一个前导零:03:25 PM
而不是3:25 PM
。
此外,会议纪要与上午或下午之间应有空格。
我找不到其中一个与之匹配的转换代码。
如果重要,这是SQL Server 2008 R2。
答案 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)