现在,我的代码对日期字段进行了以下转换:
convert(varchar, Citation.PublishedOn, 101)
但是,这会返回像 03/01/2010 这样的日期。要求将日期显示为 2010 年 3 月 1 日(没有前导零,但有 4 位数的年份)。我查看了http://msdn.microsoft.com/en-us/library/ms187928.aspx并没有看到任何明确排除前导零的内容。
如何格式化日期以排除前导零?
现在,我的代码对日期字段进行了以下转换:
convert(varchar, Citation.PublishedOn, 101)
但是,这会返回像 03/01/2010 这样的日期。要求将日期显示为 2010 年 3 月 1 日(没有前导零,但有 4 位数的年份)。我查看了http://msdn.microsoft.com/en-us/library/ms187928.aspx并没有看到任何明确排除前导零的内容。
如何格式化日期以排除前导零?
我会这样做:
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)
但是,这意味着多次提取相同的值。
您可以使用 FORMAT 函数,该函数专为此类事情而构建,尽管我同意如果您可以等待在客户端对其进行格式化,您可能会更好,因为您可以灵活地使用该数据作为日期在沿线的任何一点(ymmv - 只是更多的最佳实践)。
例子:
FORMAT ( table.myDateColumn, 'd', 'en-US' )
请参阅http://msdn.microsoft.com/en-us/library/hh213505.aspx
在旧版本的 SQL Server 中可能不可用
你可以这样做:
STUFF(REPLACE('/'+CONVERT(CHAR(10), Citation.PublishedOn ,101),'/0','/'),1,1,'')
(基于http://www.sqlservercentral.com/Forums/Topic1241877-1292-1.aspx。)
我采取了不同的方法,这更像是一个技巧:
REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')
我认为它很漂亮,但是在错误地解释了上面的 STUFF 技巧后我得到了这个想法。:)