oracle 在SQL/PLSQL中使用DATE类型

lbsnaicq  于 2023-08-03  发布在  Oracle
关注(0)|答案(3)|浏览(156)

我发现下面的代码是我的一个同事写的,运行得很好。

UPDATE STUDENT_COURSE_INTERMISSION SCI
SET END_DT = '25-MAY-2024' 
where END_DT = '28-MAY-2024'

字符串
我建议将代码更改为以下内容(使用带有日期格式的TO_DATE,而不是传递文本)

UPDATE STUDENT_COURSE_INTERMISSION SCI
SET END_DT = TO_DATE('25/05/2024', 'dd/mm/yyyy')
where END_DT = TO_DATE('28/05/2024', 'dd/mm/yyyy')


在数据库中,END_DT是DATE格式,如下所示。
x1c 0d1x的数据
是否可以使用日期而不像第一个代码示例中那样强制转换它们?我真的很感谢你的开放,因为两者都很好。
PS -据我所知,我们可以使用以下两种方式进行DATE

  • TO_DATE(日期,格式)
  • DATE(日期)

谢谢你的好意

qlzsbp2j

qlzsbp2j1#

不检查正确的日期是非常不干净和危险的,很容易导致问题。
例如,假设我们现在在日本:

ALTER SESSION SET NLS_TERRITORY = 'Japan';

字符串
然后,你在问题中提到的使用字符串作为“日期”的坏主意将不再起作用。如果我们尝试执行以下查询…

SELECT yourcolumn
FROM yourtable
WHERE yourcolumn = '24-JULY-2023';


...我们会得到这样的错误:
ORA-01858:找到非数字字符而不是数字字符。
使用正确的TO_DATE将正常工作,例如,此命令将成功地更新今天的日期行:

UPDATE yourtable
SET yourcolumn = TO_DATE('2024-07-31','YYYY-MM-DD') 
WHERE yourcolumn = TO_DATE('2023-07-24','YYYY-MM-DD');


看到这个fiddle example,它显示了这种行为。

8wigbo56

8wigbo562#

它取决于SQL Server实现支持哪些格式以及以何种格式保存它们。
大多数情况下,支持多种不同的格式,但选择一种格式将数据存储在数据库本身中。
在更新查询时,在速度或复杂性降低方面没有区别,因为数据库总是会尝试格式化您的输入。
希望这对你有帮助。

7cjasjjr

7cjasjjr3#

通常,最好避免隐式转换,例如尝试从varchar转换为date,如果该数据库会话的nls_date_format与作为字符串传递的格式不对应,则可能会失败。因此,使用to_date和to_timestamp。此外,对于to_char应用所需的格式掩码,以便无论nls_date_format如何,都可以获得一致的结果。对于日期,也可以使用日期“2023-10-23”(yyyy-mm-dd格式)。

相关问题