1

日時の値を特定の形式に変換しようとしていますが、スタイル コードは必要ないようです。スタイル コードに関する SQLUSA の投稿を試しましたが、どれもまったく正しくありません。

日付/時刻がyyyy-mm-dd hh:nn:ss (24 時間)として格納される列があります。

この列を取得したいという選択ステートメントがありますが、日付を次のように表現します: mm/dd/yyyy hh:nn:ss AM/PM

私が来た最も近いものは次のとおりです。

CONVERT(varchar,[datetimecolum],22) AS [newcolumnname]

しかし、それは世紀年(yyyy)ではなく、2桁の年しか与えません。

何か案は?私は完全に迷っています。:(

4

5 に答える 5

2

まず、日時フィールドは特定の文字列形式ではなく、シリアル番号として保存されます。したがって、画面に表示されるのは、保存されているものではなく、データベース ツールのデフォルトの日付のレンダリングです。第二に、なぜ SQL でこれを行うのですか? 値をアプリケーションに渡す場合は、そこでネイティブ型から変換してください。第 3 に、TSQL では 22 は有効な変換コードではないと思います。詳細については、 http://msdn.microsoft.com/en-us/library/ms187928.aspxを確認してください。

于 2012-09-13T22:07:48.473 に答える
1

から: http://msdn.microsoft.com/en-us/library/ms187928.aspx

リストされている他のすべての形式から判断すると、形式番号に 100 を追加するだけで「世紀あり」(yyyy) になると推測されます。

ドキュメント (および私のテスト) によると、形式 22 (または 122) はありませんが、必要なものを正確に取得するには、他の 2 つの形式を組み合わせる必要があります。

CONVERT(varchar,[datetimecolum],101) + ' ' + CONVERT(varchar,[datetimecolum],108) AS [newcolumnname]

SQLFiddle デモ

于 2012-09-13T21:59:16.333 に答える
0

あなたは2つの部分でそれをする必要がありますそしてあなたはミリ秒を取り除くためにものを使う必要があります。ミリ秒を取り除く他の方法を見つけたら私は更新します

SELECT CONVERT(VARCHAR(10), GETDATE(), 101)+' '+STUFF(RIGHT(CONVERT(VARCHAR(26), GETDATE(), 109),14),9,4,'')

出力:09/13/2012 11:15:21PM

編集:AM / PMの前にスペースが必要な場合は、代わりに使用し' 'ます''

SELECT CONVERT(VARCHAR(10), GETDATE(), 101)+' '+STUFF(RIGHT(CONVERT(VARCHAR(26), GETDATE(), 109),14),9,4,' ')

出力:09/13/2012 11:15:59 PM

于 2012-09-14T00:10:50.633 に答える
0

これは私のオリジナルよりもさらに不格好ですが、時間または分の先行ゼロを取得しないことを除いて、機能します。このコードを変更してそれを行うこともできますが、非常に面倒になるので、それはあなたに任せます ;-)

つまり、日付 + 時刻が

2012 年 3 月 1 日午後 10 時 1 分 35 秒、

代わりに次を取得します。

2012 年 3 月 1 日午後 10 時 1 分 35 秒

イライラしますよね?

とにかく、どうぞ。お役に立てれば。

SELECT dt.ID,
CASE WHEN EXISTS(SELECT DATEPART(HH, mt.TheDate)
                FROM MyTable AS mt 
                WHERE mt.ID = dt.ID 
                AND (DATEPART(HH, mt.TheDate)) > 12)
    THEN
        (SELECT
        CONVERT(varchar,(MONTH(dt.TheDate))) + '/' +
        CONVERT(varchar,(DAY(dt.TheDate))) + '/' +
        CONVERT(varchar,(YEAR(dt.TheDate))) + ' ' +
        CONVERT(varchar, DATEPART(HH, dt.TheDate)-12) + ':' +
        CONVERT(varchar,(DATEPART(mi, dt.TheDate))) + ':' +
        CONVERT(varchar,(DATEPART( ss, dt.TheDate))) + ' PM')
    ELSE
        (SELECT
        CONVERT(varchar,(MONTH(dt.TheDate))) + '/' +
        CONVERT(varchar,(DAY(dt.TheDate))) + '/' +
        CONVERT(varchar,(YEAR(dt.TheDate))) + ' ' +
        CONVERT(varchar, DATEPART(HH, dt.TheDate)) + ':' +
        CONVERT(varchar,(DATEPART(mi, dt.TheDate))) + ':' +
        CONVERT(varchar,(DATEPART( ss, dt.TheDate))) + ' AM') END As FullDate
FROM MyTable AS dt
于 2012-09-13T22:07:57.443 に答える
0

これでいけると思います

  select stuff(convert(varchar(20),getdate(),22),7,2,
  CAST( DATEPART(yyyy,getdate()) as CHAR(4)))

これは近いですが、AM PM はありません

  select convert(varchar(100),getdate(),22), 
   + ' ' + CAST(DATEPART(mm,getdate()) as CHAR(2))
   + '/' + CAST( DATEPART(dd,getdate()) as CHAR(2))
   + '/' + CAST( DATEPART(yyyy,getdate()) as CHAR(4))
   + ' ' + CAST(DATEPART(HH,getdate()) as CHAR(2))
   + ':' + CAST(DATEPART(mi,getdate()) as CHAR(2))
   + ':' + CAST(DATEPART(ss,getdate()) as CHAR(2))
于 2012-09-13T22:46:07.107 に答える