问题描述
|
现在,我的代码对日期字段进行了以下转换:
convert(varchar,Citation.PublishedOn,101)
但是,返回的日期类似于03/01/2010。要求将日期显示为3/1/2010(不带前导零,但带4位数字的年份)。我查看了http://msdn.microsoft.com/zh-cn/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技巧之后才有了主意。 :)