以前の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.
ちょうどより小さいchar - char(16)に変換してください。 –