11

现在,我的代码对日期字段进行了以下转换:

convert(varchar, Citation.PublishedOn, 101)

但是,这会返回像 03/01/2010 这样的日期。要求将日期显示为 2010 年 3 月 1 日(没有前导零,但有 4 位数的年份)。我查看了http://msdn.microsoft.com/en-us/library/ms187928.aspx并没有看到任何明确排除前导零的内容。

如何格式化日期以排除前导零?

4

4 回答 4

16

我会这样做:

DECLARE @dt datetime
SET @dt= Citation.PublishedOn
SELECT LTRIM(STR(MONTH(@dt)))+'/'+LTRIM(STR(DAY(@dt)))+'/'+STR(YEAR(@dt),4)

您选择日期,然后从中提取日、月和年,并使用ltrim().

如果你不想声明一个变量,你可以这样做

SELECT LTRIM(STR(MONTH(Citation.PublishedOn)))+'/'+LTRIM(STR(DAY(Citation.PublishedOn)))+'/'+STR(YEAR(Citation.PublishedOn),4)

但是,这意味着多次提取相同的值。

于 2011-05-25T17:44:52.810 回答
7

您可以使用 FORMAT 函数,该函数专为此类事情而构建,尽管我同意如果您可以等待在客户端对其进行格式化,您可能会更好,因为您可以灵活地使用该数据作为日期在沿线的任何一点(ymmv - 只是更多的最佳实践)。

例子:

FORMAT ( table.myDateColumn, 'd', 'en-US' )

请参阅http://msdn.microsoft.com/en-us/library/hh213505.aspx

在旧版本的 SQL Server 中可能不可用

于 2012-12-13T00:09:02.170 回答
3

你可以这样做:

STUFF(REPLACE('/'+CONVERT(CHAR(10), Citation.PublishedOn ,101),'/0','/'),1,1,'')

(基于http://www.sqlservercentral.com/Forums/Topic1241877-1292-1.aspx。)

于 2012-03-12T17:49:24.013 回答
2

我采取了不同的方法,这更像是一个技巧:

REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')

我认为它很漂亮,但是在错误地解释了上面的 STUFF 技巧后我得到了这个想法。:)

于 2012-07-31T19:25:37.370 回答