【发布时间】:2022-12-03 00:21:30
【问题描述】:
我正在使用 Oracle DB 11g
我有一个主键为 CHAR(4) 的数据库表 - 虽然此列仅使用数字。
我注意到有些记录显示为“0018”或“0123”。
我注意到的事情很少,需要一些帮助
- CHAR 列是否“自动”将零填充为一个值?
-我还注意到,在编写 SQL 时,如果我不在我的 where 子句中使用引号,它会返回结果,但如果我使用引号,它不会返回结果?例如
DB CHAR(4) 列的键为“0018”
我使用这个查询
SELECT * FROM TABLE_A WHERE COLUMN_1=18;
我得到了预期的行。
但是当我尝试以下操作时
SELECT * FROM TABLE_A WHERE COLUMN_1='18';
这不起作用,但它再次起作用
SELECT * FROM TABLE_A WHERE COLUMN_1='0018';
所以我有点困惑第一个查询如何在没有引号的情况下按预期工作?
【问题讨论】:
-
因为隐式转换。系统将 column_1 转换为截断前导零的数字。或者 18 被转换为 char(4) ,它添加了前导零。我不记得哪一个胜出,但两者之一正在发生。随着填充的发生。这是 char 数据类型的函数。 varchar(可变长度字符)不会填充。
-
@xQbert Oracle 从最少限制的数据类型转换为最多限制的数据类型,因此如果将字符串与数字进行比较,它将尝试将字符串转换为数字。
标签: sql oracle oracle11g char oracle-sqldeveloper