sql-server
  • sql-server-2012
  • 2017-03-24 6 views 1 likes 
    1

    2つの日付の間にDBに置かれたMS SQLからすべてのデータを取得するクエリを作成しました。MS SQLクエリ:日付と時刻を異なる形式に変換する

    SELECT convert(varchar(30), [date], 113) as "Date" 
    FROM [I3_IC].[dbo].[Be] 
    Where [date] >= '2017-03-13T00:00:00.000' AND [date] <= '2017-03-19T00:00:00.000' 
    

    出力は次のようになります。017

    そして、私はそれになりたい::2017年3月13日10:13:40 13-03-2017 10時40

    任意のアイデアどのように私ができますそれを行う?

    +0

    ちょうどより小さいchar - char(16)に変換してください。 –

    答えて

    3

    あなたはFORMATを使用することができます。

    SELECT FORMAT(GETDATE(),'dd-MM-yyyy hh:mm') as [Date] 
    FROM [I3_IC].[dbo].[Be] 
    WHERE [date] >= '2017-03-13T00:00:00.000' 
    AND [date] <= '2017-03-19T00:00:00.000'; 
    

    さておき、あなたがあなたの日付範囲を選択するために使用する条件に注意する必要があるとして(<= '2017-03-19T00:00:00.000'が実際に'2017-03-19T00:00:00.000'を選択します、あなたは何をしたいということでしょうか?)

    連結
    +2

    おそらくhh対HH12時間対24時間(Plus1)の違いを言及してください –

    +0

    おかげでラマックは、そのトリックをしました。今すぐクエリを実行すると、正しいデータが返され、その日付範囲の間のデータが返されます。範囲をよりわかりやすい形式に調整することができれば簡単になるはずです:) – Paul

    0

    以前のSQL Server 2012に、2 convert() styles

    select convert(char(10),getdate(),105)+' '+convert(char(5),getdate(),108) 
    

    リターン:24-03-2017 16:05

    SQL Server 2012以降では、format()をLamakの回答と同様に使用できます。

    select format(getdate(),'dd-MM-yyyy HH:mm') 
    

    リターン:24-03-2017 16:05

    しかしformat()が遅くなることができ、ここで見てみましょう:私のシステム上の簡単なテストでformat() is nice and all, but… - Aaron Bertand


    を、convert()を連結することは、このためにformat()よりもはるかに高速でした(フォーマットされていない値で順序付けられたトップ1を選択する場合を除く)。

    +---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 
    | func | total_elapsed_time | avg_elapsed_time | total_worker_time | avg_worker_time | total_clr_time |              t              | 
    +---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 
    | convert |    7000 | 1400.00   |    7000 | 1400.00   |    0 | DECLARE @d CHAR(10);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; | 
    | format |    135000 | 27000.00   |   135000 | 27000.00  |   128000 | DECLARE @d CHAR(10);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;      | 
    | convert |    14000 | 2800.00   |    14000 | 2800.00   |    0 | SELECT d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d;      | 
    | format |    143000 | 28600.00   |   143000 | 28600.00  |   123000 | SELECT d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;           | 
    | convert |    1000 | 200.00   |    1000 | 200.00   |    0 | SELECT TOP (1) convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d;     | 
    | format |    1000 | 200.00   |    1000 | 200.00   |   1000 | SELECT TOP (1) format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;          | 
    | convert |    4000 | 800.00   |    4000 | 800.00   |    0 | DECLARE @d CHAR(16);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; | 
    | format |    105000 | 21000.00   |   105000 | 21000.00  |   95000 | DECLARE @d CHAR(16);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;      | 
    +---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 
    

    このテストは、Aaron Bertrandの記事に含まれているテストスクリプトの変更です。変更されたバージョンはオンになっていますpastebin, here.

    関連する問題