2017-05-01 15 views
0

私はSQL Server Management Studioを使用しています。私のデータベースには、nvarchar(255)として格納されている日付を含むテーブルが1つあります。このテーブルのデータをConverted_Datesという新しいテーブルに移行し、このデータを日付として保存したいと考えています。また、私はそれらすべてがこのYYYY-MM-DDのようにフォーマットすることにしたいSQL Serverのフォーマットでnvarcharを日付にキャスト

現在の日付テーブルには、次のようになります。

**Converted_Dates** 
2011-06-15 
2011-06-16 
2013-03-30 
2013-04-16 
... 
**Dates** 
15/6/2011 
16/6/2011 
2013-03-30 
2013-04-16 
... 

は、私は新しいテーブルは次のようになりたいです

このクエリは実行されますが、日付の書式設定は同じままです。データ型だけがnvarchar(255)からdateに変更されます。

USE [reporting_database] 
    GO 
    INSERT INTO [dbo].[Converted_Dates] 
    SELECT 
     cast(Dates as date) 


     FROM [dbo].[Dates] 
    GO 

古いテーブルのデータを新しいテーブルに適切な形式でキャストする方法についてのアドバイスはありますか?

+0

データベース内の日付は、定義した形式では格納されません。それらは単に日付として保存されます。クライアント/サーバ/マシン/クライアントに日付がどのように表示されるかは、クライアントの設定によって異なります。変更することはできますが、データベースに保存されている日付の形式は変更されません。 – Utsav

+0

既存のクエリに 'where isDate(dates)= 1'を追加してみてください。 –

答えて

1

データ型はdatedatetimeのデータ型はSQL Serverには格納されません。日付を別の形式で表示する場合は、組み込み関数を使用してvarchar(またはnvarcharncharchar)のデータ型に変換すると、日付と日付/時刻のデータ型の表示方法を操作できます。

日付はdateのデータタイプとして保存する必要があります。アプリケーションレベルで日付をフォーマットすることができます。 SQLでフォーマットする必要がある場合は、convert() stylesを使用します。

select convert(char(10),getdate(),120) 

リターン:あなたがformat()

select format(getdate(),'yyyy-MM-dd') 

戻って使用することができ2012+ SQL Serverで2017-05-01


2017-05-01

しかしformat()は、ここを見て、はるかに遅いです。 format() is nice and all, but… - Aaron Bertrand

+0

文字列を日付に変換することに問題があるため、下降します。この答えは日付を文字列に変換することです。 –

+0

@DanBracuk私は、日付の記憶域を文字列として(そうしないで)、どこでいつ書式を設定するか、必要に応じてsqlで書式を設定する方法についてアドバイスします。 OPは既に文字列を 'date'データ型に変換しましたが、日付に"優先形式 "が必要でした。私はダウンドローにもかかわらず私の答えで立っている:P – SqlZim

+0

明らかに、私たちの一人が質問を読まなかった。どうやらそれは私だった。申し訳ありません。下降は撤回されます。 –

関連する問題