2016-03-31 20 views
0

データベースに日付を追加したい。しかし、時間のない日付のみ。日付をOracleデータベースに追加する日付日付

可変タイプの場合DateTimeそれは機能しますが、時間は00:00:00と挿入されます。

私はこれを試しましたが、入力エラーが出ます。

INSERT INTO BNR(EUR,DATE_API) VALUES (4.2546 , to_date('2016/30/03','DD-MON-YY')); 

これは、変数

DateTime date_bnr = (from cube in doc.Descendants(d + "Cube") 
         from rate in cube.Elements(d + "Rate") 
         where 
          ((DateTime)cube.Attribute("date")).Date == yesterday 
           && 
          (string)rate.Attribute("currency") == "EUR" 
         select ((DateTime)cube.Attribute("date")).Date 
     ).FirstOrDefault(); 

var datebnr = date_bnr.ToShortDateString(); // what I tried 
var dt = date_bnr.ToString("DD-MON-YY");  // what I tried 

私の日であり、これはあなたが入力時間がないコンポーネントを持っていないことを検証するためにcheck制約を追加することができ、データベース

string insert_bnr = "INSERT INTO BNR(EUR,DATE_API) VALUES (:value,:datee) "; 
      OracleCommand cmd = new OracleCommand(insert_bnr, con); 

      OracleParameter bnr_value = new OracleParameter(); 
      bnr_value.OracleDbType = OracleDbType.Varchar2; 
      bnr_value.Value = bnr.ToString(); 

      OracleParameter bnr_date = new OracleParameter(); 
      bnr_date.OracleDbType = OracleDbType.Date; 
      bnr_date.Value = dt; 

      cmd.Parameters.Add(bnr_value); 
      cmd.Parameters.Add(bnr_date); 

      cmd.ExecuteNonQuery(); 
+1

オラクルでなければなりません

は常に、それは真夜中だ場合でも、時間を持ってさかのぼります。それを表示するかどうかは別の問題です。 'to_date( '2016/30/03'、 'DD-MON-YY')'では、あなたが持っている文字列リテラルと一致しないフォーマットマスクを使っているのはなぜですか? 'ToShortDateString()'は何を生成しますか?なぜ、そのパラメータを日付ではなく文字列として設定していますか? –

+1

"2016/30/03"はフォーマット文字列 "DD-MON-YY"と一致しません。 "入力エラー"とは何ですか?はいの場合は例外が発生しますか? – dlatikay

+0

エラーは「SQLエラー:ORA-01861:リテラルはフォーマット文字列と一致しません」とToShortDateString()は日付なしの日付のみを返します –

答えて

1

に私の挿入です:

alter table bnr add constraint chk_date_api check (date_api = trunc(date_api)); 

これは、テーブルの列に時間コンポーネントが存在しないことを確認します。しかし、updateまたはinsertが日付を値で設定すると、エラーが返されます。したがって、エラーを回避するために正しいデータを挿入するのはアプリケーションの責任です。

また、トリガーを使用して任意の時間コンポーネントを削除することもできます。個人的には、checkという制約があると、それは残念だと思います。

+0

OPはすでに深夜に設定された時間で挿入されているようですが、時間のないデータ型が必要です(私は思っています)。もちろん存在しない。これは、事故によって別の時間が設定されないようにするのに便利ですが、本当に尋ねられていることがわかりません。 –

0

フォーマットto_date('2016/30/03','DD-MON-YY')が一致しません。それはどちらか(好ましくは)to_date('03/MARCH/16','DD-MON-YY')またはto_date('2016/30/03','YYYY/DD/MM')

関連する問題