【发布时间】:2021-03-29 19:13:42
【问题描述】:
我需要获取表中项目的最后修改日期(oracle db)。 以db格式修改日期=04-DEC-20 在控制台中显示时修改日期=04-09-2020
获取修改日期的c#代码
string connString =DBUtils.GetDBConnection();
OracleConnection conn = new OracleConnection();
conn.ConnectionString = connString;
string sql = "select LASTMODIFIED , name from v_vname where name in('hector')";
OracleCommand cmd = new OracleCommand();
// Set connection for command.
cmd.Connection = conn;
cmd.CommandText = sql;
conn.Open();
using (DbDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
int date = reader.GetOrdinal("LASTMODIFIED"); // 0
var LASTmTime = reader.GetValue(0);
Console.WriteLine("modifieddate:" + LASTmTime);
}
}
}
【问题讨论】:
-
您可能需要检查两件事:TO_CHAR 函数及其格式掩码和/或 NLS 设置。但是,主要的是 - 如果您在 DB 中有日期/时间戳,最好在应用程序中将它们读取为时间,然后仅在输出时相应地格式化它们
-
c# 和 Oracle 都使用相同的 DateTime 格式(一个数字)来存储日期。在 c# 中调试时,您会看到 VS 用于显示日期的默认方法。显示 ToString() 时使用默认方法,因此日期在 Oracle 和 c# 中完全相同,只是以不同的格式显示。
-
LASTMODIFIED 列的数据类型是什么?如果它是 DATE,那么你断言它的格式是
是不正确的。 DATE 数据类型具有一致的内部二进制格式。您看到和报告为 只是日期的字符表示,由隐式或显式使用TO_CHAR()产生。但是,如果 LASTMODIFIED 的数据类型是 not DATE,那么您有一个严重的设计缺陷。日期应始终输入为 DATE 或 TIMESTAMP,更多信息请访问edstevensdba.wordpress.com/2011/04/07/nls_date_format -
@jdweng 这是不正确的。在 Oracle 中,
DATE数据类型为 stored in a table as 7-bytes,代表世纪、世纪、月、日、小时、分钟和秒。 -
@MT0 :它仍然是一个数字,驱动程序在数据库和网络之间进行转换,这与问题无关。这个问题与显示数字有关。