我正在尝试更改查询的NLS_DATE_FORMAT
,而且我正在努力做到这一点。
我用了两种方法
第一个
// Use the command to change the format
OracleCommand cmd = new OracleCommand("ALTER SESSION SET NLS_DATE_FORMAT = \'YYYY-MM-DD\'", conn);
cmd.ExecuteNonQuery();
// Then do another command
OracleCommand mainCommand = new OracleCommand("SELECT * FROM dates_table", conn);
OracleDataReader reader = command.ExecuteReader();
while(reader.Read())
{
// Read Data
}
此选项的查询都成功,但日期格式仍然包含时间(HH:MM:SS)
第二位
// Put both commands in the same sql statement
string sql = "ALTER SESSION SET NLS_DATE_FORMAT = \'YYYY-MM-DD\';";
sql += "SELECT * FROM dates_table";
OracleCommand command = new OracleCommand(sql, conn);
OracleDataReader reader = command.ExecuteReader();
while(reader.Read())
{
// Read Data
}
此选项没有成功,并给出了错误ORA-0091
,它似乎是第一个语句中的分号。我也尝试移除分号,但是它会产生一个ORA-00922
错误。
从现在起我有点困住了,任何帮助都会非常感谢。提前感谢!
发布于 2021-08-25 11:45:49
甲骨文DATE
是一种二进制数据类型,不存储格式,所以当您在第三方应用程序(即C#)中获得日期列时,您将只得到表示年份、月、日、小时、分钟和秒的二进制数据,而不是任何格式。
NLS_DATE_FORMAT
会话参数是Oracle在用户会话中使用的内部格式,用于隐式地将日期转换为(和从)字符串。
SQL/Plus和SQL客户端应用程序还使用NLS_DATE_FORMAT
会话参数来控制如何向用户显示二进制日期值,但是这种格式设置是在客户端应用程序上完成的(而不是由Oracle数据库完成)。
如果要格式化DATE
数据类型,则在C#中执行格式设置。
如果您真的想在数据库中格式化它,那么使用TO_CHAR
将每个日期列(没有格式)转换为格式化的字符串。
SELECT TO_CHAR(date_column, 'YYYY-MM-DD') AS formatted_date_column
FROM dates_table
https://stackoverflow.com/questions/68928740
复制