我发现下面的代码是我的一个同事写的,运行得很好。
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(日期)
谢谢你的好意
3条答案
按热度按时间qlzsbp2j1#
不检查正确的日期是非常不干净和危险的,很容易导致问题。
例如,假设我们现在在日本:
字符串
然后,你在问题中提到的使用字符串作为“日期”的坏主意将不再起作用。如果我们尝试执行以下查询…
型
...我们会得到这样的错误:
ORA-01858:找到非数字字符而不是数字字符。
使用正确的
TO_DATE
将正常工作,例如,此命令将成功地更新今天的日期行:型
看到这个fiddle example,它显示了这种行为。
8wigbo562#
它取决于SQL Server实现支持哪些格式以及以何种格式保存它们。
大多数情况下,支持多种不同的格式,但选择一种格式将数据存储在数据库本身中。
在更新查询时,在速度或复杂性降低方面没有区别,因为数据库总是会尝试格式化您的输入。
希望这对你有帮助。
7cjasjjr3#
通常,最好避免隐式转换,例如尝试从varchar转换为date,如果该数据库会话的nls_date_format与作为字符串传递的格式不对应,则可能会失败。因此,使用to_date和to_timestamp。此外,对于to_char应用所需的格式掩码,以便无论nls_date_format如何,都可以获得一致的结果。对于日期,也可以使用日期“2023-10-23”(yyyy-mm-dd格式)。