首页 > 解决方案 > 如何在 Oracle 中识别工作日?

问题描述

早上好,

我正在尝试为 Oracle 寻找 Weekday 的替代方案,由于某种原因,我们的版本无法识别 Weekday 功能。一直报错,

工作日:标识符无效。

我正在尝试在 Where 语句中使用它:

Where
Weekday(OR_Log.Surgery_DAte) not in (1,7)

淘汰任何周六或周日的手术。这是为了将代码从 Teradata 更新到 Oracle。

甲骨文 V. 12C

任何帮助,将不胜感激。

标签: sqloracledate-formatting

解决方案


您的 Oracle 版本无法识别“工作日”,因为那不是Oracle 功能

您可以使用to_char()功能获取日期编号,但它取决于 NLS 设置,因此不要回复它更安全。日期名称也依赖于 NLS 语言,但至少可以作为函数调用的一部分被覆盖:

where to_char(OR_Log.Surgery_Date, 'Dy', 'NLS_DATE_LANGUAGE=ENGLISH') not in ('Sat', 'Sun')

'Dy'格式元素与所有其他元素一起在文档中进行了描述。请注意,'DY'以大写形式为您提供日期缩写,'Day'或者'DAY'以混合/大写形式为您提供全日名称;但是默认情况下会用空格填充(其他语言中的缩写也是如此......);但如果您想要全天名称以提高可读性,则可以添加修饰符:

where to_char(OR_Log.Surgery_Date, 'FMDay', 'NLS_DATE_LANGUAGE=ENGLISH') not in ('Saturday', 'Sunday')

推荐阅读