我可以在PL/SQL查询的where子句中使用to_char函数吗?

我可以在PL/SQL查询的where子句中使用to_char函数吗?,sql,date,plsql,dayofweek,Sql,Date,Plsql,Dayofweek,我试图通过以下查询找出一周中某一天的平均电量: SELECT avg(volume) FROM v_nem_rm16 WHERE to_char(day, 'day') = 'monday'; 其中v_nem_rm16是一个表和卷,day是它的列,我的查询返回null,无论我如何更改day值“星期一”、“星期二” 此查询是否错误?实际上,返回的“DAY”在右侧带有空格。 如果使用“RTRIM”,则可以避免空值 SELECT avg(volume) FROM v_nem_rm16 WHERE R

我试图通过以下查询找出一周中某一天的平均电量:

SELECT avg(volume)
FROM v_nem_rm16
WHERE to_char(day, 'day') = 'monday';
其中v_nem_rm16是一个表和卷,day是它的列,我的查询返回null,无论我如何更改day值“星期一”、“星期二”


此查询是否错误?

实际上,返回的“DAY”在右侧带有空格。 如果使用“RTRIM”,则可以避免空值

SELECT avg(volume)
FROM v_nem_rm16
WHERE RTRIM(to_char(day, 'day')) = 'monday';

实际上,“DAY”返回时在右侧有空格。 如果使用“RTRIM”,则可以避免空值

SELECT avg(volume)
FROM v_nem_rm16
WHERE RTRIM(to_char(day, 'day')) = 'monday';

我宁愿使用不同的日期格式,以确保日与nls相关,这是不好的(例如,您的软件将在西班牙失败)。D返回数字,因此在您的情况下,查询应该如下所示

SELECT avg(volume)
FROM v_nem_rm16
WHERE RTRIM(to_char(day, 'd')) = 1;

我宁愿使用不同的日期格式,以确保日与nls相关,这是不好的(例如,您的软件将在西班牙失败)。D返回数字,因此在您的情况下,查询应该如下所示

SELECT avg(volume)
FROM v_nem_rm16
WHERE RTRIM(to_char(day, 'd')) = 1;

非常感谢,它工作完美,我又学到了另一个新东西,使用
to_char(day,'fmday')
非常感谢,它工作完美,我又学到了另一个新东西,使用
to_char(day,'fmday')
这是避免不必要错误的好方法,非常感谢,顺便说一句,如果我错了,你能纠正我吗:1代表星期一,2代表星期二,…,7代表星期天?我的错-'D'也是nls依赖的,为了使你的plsql稳定,你可以使用RTRIM(to_char(day,'day,'nls_DATE_LANGUAGE=american')='Monday',明确提到nls字符setwell,这是一个避免不必要错误的好方法,非常感谢,顺便说一句,如果我错了,你能纠正我吗:1代表星期一,2代表星期二,…,7代表星期天?我的错-'D'也是nls依赖的,为了使plsql稳定,你可以使用RTRIM(to_char(day,'day,'nls_DATE_LANGUAGE=american'))='monday'明确提及NLS字符集