2016-06-15 14 views
0

日付時刻を文字列に変換します。私のSQLクエリでは、 "2016/06/15"の日付があります。この日付で、私は1ヶ月 "2016/05/15"を差し引いています。 私はこの部分を働かせました。しかし、文字列(varcharまたはnvarchar)に変換しようとすると、次の例外が発生します。 文字列から日付時刻を変換するときに変換に失敗しました。私はこれを修正する方法がわかりませんが、助けていただければ幸いです。datetimeを文字列に変換できませんSQL

はここ

Declare @date as datetime 
Set @date = GetDate() 
print @date 
Declare @dateMinusOneMonth as datetime 
Set @dateMinusOneMonth = GetDate() 
Set @dateMinusOneMonth = Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @date)), 101) 
print @dateMinusOneMonth 
+0

私は変換が 'Sql Server'タスクではないと思います。 'C#'コードの値を変換する – Fabio

+0

Fabioが知っている量を表示します。 CONVERT({Interval}、{expression}、{style})はSQL SERVERの関数です。[リンク](https://msdn.microsoft.com/en-us/library/ms187928.aspx) –

答えて

3

の下printでそれを変換することができます。

Declare @dateMinusOneMonth as nvarchar(20) 
Set @dateMinusOneMonth = Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @date)), 101) 
+0

ahhです。ご協力いただきありがとうございます。それは動作します:) – RedRocket

+0

ええ、@ドラゴンボーン、うまくいけば、あなたは文字列(20)の長さを指摘した。あなたが気をつけなければ、それはあなたのコードを台無しにする可能性があります。 –

+0

@clifton_h、ありがとう、あなたの思い出しのため – RedRocket

2

@dateMinusOneMonthはタイプdatetimeであり、あなたがそれを有効でないvarchar値を代入しようとしている私のクエリです。

あなたはdatetimeとして@dateMinusOneMonthを宣言しているような

Set @dateMinusOneMonth = DateAdd(month, -1, @date)  
print Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @dateMinusOneMonth)), 101) 
1

まず、VARCHAR/NVARCHARに変換することに専念しましょう。

DECLARE @Time DATE 
SET @Time = CAST(DATEADD(MM, -1, GETDATE()) AS DATE) 
SELECT CAST(@TIME AS VARCHAR(10)) 

これはどれほど簡単でしたか?

結果:2016-05-14

があなたのDBが異なって設定することができることに注意してください、とあなたがテストしたり、正しく日付をフォーマットする必要があります。 最後に、TRY_CONVERT()を使用すると、コード全体が失敗するのではなく、NULLが返されます。

+0

あなたの応答をありがとう、それはうまくいきます:) – RedRocket

0

すべてを1行で簡単に実行できます。また、私は101,102,113などの日付の文字列の形式を変換するために検索するのが好きではありません。あなたがC#で言及しているのを見ると、SQL 2012以降であれば、C#のようにFORMATを使用するだけです。

PRINT FORMAT(DATEADD(MONTH,-1,GETDATE()), 'yyyy/MM/dd') 
関連する問題