1. ホーム
  2. sql-server

[解決済み] SQL Serverのタイムスタンプ列をdatetime形式に変換する方法

2022-03-06 19:27:02

質問

SQL Server はタイムスタンプを次のように返します。 'Nov 14 2011 03:12:12:947PM' 文字列を 'Y-m-d H:i:s' のような日付フォーマットに変換する簡単な方法はありますか?

今のところ、私は

date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))

解決方法は?

SQLサーバーの TIMESTAMP データ型には 何もない は、日付や時間とは関係ないのです!

これは連続した8バイトの整数を16進数で表現したもので、行が読み込まれてから変化していないことを確認するためにのみ有効です。

16進数の整数を読み出すこともできますし、必要であれば BIGINT . 例として

SELECT CAST (0x0000000017E30D64 AS BIGINT)

その結果は

400756068

SQL Server の新しいバージョンでは、これは RowVersion - というのも、これは本当にその通りだからです。そのため ROWVERSIONに関するMSDNドキュメント :

<ブロッククオート

データベース内で自動的に生成される一意のバイナリ番号を公開するデータ型です。 テーブルの行のバージョンスタンプに使用されます。テーブルの rowversion データ型は 単なる数値の増加であり 日付や時刻を保持する . 日付や時刻を記録するには、datetime2 を使用します。 というデータ型があります。

だからあなたは できない SQL Serverを変換する TIMESTAMP を日付/時刻に変換することができます。

しかし、タイムスタンプと言いつつも、本当は DATETIME カラムを使用する場合、以下のような有効な日付フォーマットを使用することができます。 CASTとCONVERT のトピックを参照してください。これらは、SQL Serverによって定義され、サポートされています。それ以外のものはサポートされていません。例えば、手動で多くのキャストや連結を行う必要があります(推奨されません)。

お探しのフォーマットは ODBCカノニカル (style = 121)となります。

DECLARE @today DATETIME = SYSDATETIME()

SELECT CONVERT(VARCHAR(50), @today, 121)

を与える。

2011-11-14 10:29:00.470

SQL Server 2012 では、ついに FORMAT 機能 カスタムフォーマットを行うために......。