私のSQLコードは午前12時ではなく00を表示しています。どうすれば調整できますか?

私は私のためにうまくいっている次のコードを持っています。私はそれをSQLのSSISパッケージで使用しています。私が抱えている問題は、真夜中から午前1時までの間、それは00として表示されているということです。以下のコードをできるだけ多く残したいと思います。それは私のために働いていますが、 。どんな助けでも大いに感謝されるでしょう!

ありがとうございました、 ジョン

    SELECT     CASE WHEN DATEPART(hour, DateTimeField) < 13 THEN 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, DateTimeField) AS VARCHAR(2)), 2) 
    ELSE 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, dateadd(hour, - 12, DateTimeField))
    AS VARCHAR(2)), 2) END
1

2 答え

私はあなたが単に代わりにこれを行うことができると思う:

SELECT SUBSTRING(CONVERT(CHAR(14), DateTimeField, 100), 13, 2)
3
追加された
また、これはコードの一部であるため(または表示されるため)、全体を CONVERT 関数をうまく使用して置き換えることができるかもしれないことに注意してください。
追加された 著者 Tom H,
@ジョン:はい。このコードは、質問に投稿したすべてのコードを置き換えるものです。
追加された 著者 Joe Stefanelli,
@ John CONVERT スタイル100で mon dd yyyy hh :miAM(またはPM)。 CHAR(14)に変換すると、最初の14文字の mon dd yyyy hh になります。次に、SUBSTRING関数は hh 部分だけを取り出します。
追加された 著者 Joe Stefanelli,
さて、私はこれを試してみましょう!だから、このコードは私が現在使用しているすべてのコードを置き換えますか?私はあなたにすぐにそれがどのように判明するかを知らせます。ありがとうございました!
追加された 著者 John,
いい視点ね!私はこれを一瞬でテストすることができます。確かに私はそれをやっていたやり方よりもはるかにクリーンです、はい、それは大きなコードの一部だった。ありがとうございました!
追加された 著者 John,
これは完璧に機能しました!ありがとうございました!私は完全にこのコーディングを完全に理解していませんが、私はいくつかのことをやって、将来のニーズのためにこれを調べます。それは有り難いです!
追加された 著者 John,
ありがとうございました!それは知って良いです。
追加された 著者 John,

あなたが指定しなかったので、オラクルを仮定します。一般的な手法は、 TO_CHAR 関数と00-23ではなく01-12を使用できる日付変換テンプレートを使用することです。

select to_char(sysdate, 'HH:MI:SS AM') from dual;

select to_char(sysdate, 'HH24:MI:SS') from dual;
0
追加された
私は申し訳ありません、それはSQL 2008です
追加された 著者 John,