我想在数据库中添加日期。但只有没有时间的日期。
如果我有一个变量类型 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
这是我的数据库插入
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();
答案 0 :(得分:1)
您可以添加check
约束来验证输入没有时间组件:
alter table bnr add constraint chk_date_api check (date_api = trunc(date_api));
这将确保表中的列中没有时间组件。但是,如果update
或insert
使用值设置日期,则会返回错误。因此,应用程序可以插入正确的数据以避免错误。
另一种方法是使用触发器删除任何时间组件。就个人而言,如果你有check
约束,我认为这是过度的。
答案 1 :(得分: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')