2

私はSQLに比較的慣れていないので、これがばかげた質問である場合はご容赦ください。私はこれを機能させるために長い間努力してきました。

テーブルAに、ConstructionYearというフロート列の列があります。単純な4桁の年(つまり、2010、2005、1972など)が入力されます。これらの年を使用して、テーブルBのYearBuilt日時フィールドにデータを入力する必要があります。オンラインで見つけたconvert()とcast()のさまざまな組み合わせを検索して検索して試しましたが、機能していません。

私がしたいのはこれです:

'2008'-> '2008-01-01 00:00:00.000'

'2005'-> '2005-01-01 00:00:00.000'

'1986'-> '1986-01-01 00:00:00.000'

現在起こっていることの代わりに(を使用してCAST(ConstructionYear AS DATETIME)):

'2008'-> '1905-07-02 00:00:00.000'

'2010'-> '1905-07-04 00:00:00.000'

'1984'-> '1905-06-08 00:00:00.000'

編集:解決策:cast(convert(varchar,@ConstructionYear) AS DATETIME)

したがって、私の問題には2つの主な原因がありました(SQLを初めて使用する以外)。

  1. SQLServerが日時に使用する1900年の時代については知りませんでした。私が見た1905年のすべての日時のせいで何かが起こっていることはわかりましたが、それが私の2005年を取り、1900年からの日数として数えていることを知りませんでした。

  2. 1753年。なぜ1753年が私たちが使用できる最も早い年なのですか?ここに質問を投稿する前のある時点で、おそらく正しい構文を使用していましたが、1753年より前のデータがあったため、実行されませんでした。エラーはコードにあると思いました。

4

4 に答える 4

4

この例を確認してください:

DECLARE @ConstructionYearas FLOAT
SET @ConstructionYear = 2012
SELECT FloatToDatetime = CAST(convert(varchar(4),@ConstructionYear) as datetime)

次のように出力されます。

2012-01-01 00:00:00.000


基本的に使用:

CAST(convert(varchar(4),@ConstructionYear) as datetime)

@ConstructionYearあなたのFloat変数はどこですか

それが役に立てば幸い!

于 2012-07-12T22:57:19.337 に答える
3

@Ghost回答に加えて、SQL SERVER 2012を使用している場合

使用できます

DATEFROMPARTS(ConstructionYear, 1, 1)

参照: http://msdn.microsoft.com/en-us/library/hh213228.aspx

于 2012-07-12T22:57:55.653 に答える
1
DECLARE @y FLOAT;
SELECT @y = 2012;
SELECT DATEADD(YEAR, @y-1900, 0);

2012年の数値が直接数年に換算されると思ったのはなぜですか。実際にSQLServerでは、数値は1900-01-01からの日数に変換されます。したがって、以下でも同じ結果が得られるはずです。

SELECT CONVERT(DATETIME, 2012);
SELECT DATEADD(DAY, 2012, '19000101');

他の人が示唆しているように、このデータを正しく保存することを強くお勧めします。のようなもう少し安全なものを使用することもできますが、使用してみSMALLINTませんDATEか?これには、組み込みの検証機能、変換せずにすべての種類の日付/時刻機能を直接使用する機能が付属しており、のような近似データ型で発生する可能性のある固有の丸めの問題はありませんFLOAT。日付を保存する場合は、日付データ型を使用してください。

于 2012-07-12T23:05:16.823 に答える
1

これはうまくいくはずですが、おそらくもっと良い方法があります

CAST(CAST(ConstructionYear  as nvarchar(4)) + '-01-01' as datetime)

クエリが行っているのは、提供している日数を取得し、それを 1900 年 1 月 1 日の SQL サーバー エポックに追加することです。これにより、見た結果が得られます。

于 2012-07-12T22:54:01.090 に答える