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 に答える