簡體   English   中英

SQL 類似和通配符與 Oracle SQL 開發人員

[英]SQL Like and Wildcard with Oracle SQL Developer

我在后端 Oracle DB 上使用 SQL Developer。 我有記錄,買家的名字是皮特漢森。

為什么我嘗試

select * from data1 where buyer = 'Pete Hansen';

我得到結果,沒問題。 但是,當我使用以下內容時,我沒有得到任何結果:

select * from data1 where buyer  like 'Pete Hansen';

另外,當我嘗試以下操作時,我沒有得到任何結果

select * from data1 where buyer like 'Pete Hans_n';

但以下效果很好:

select * from data1 where buyer like 'Pete Hans_n%';

你能幫我理解嗎? 提前致謝。

我懷疑它可能與尾隨空格有關, like運算符不會原諒,但=是。 要測試它,請嘗試

select * from data1 where trim(buyer) like 'Pete Hansen';

您的buyer欄似乎被定義為char 您可以看到此 db<>fiddle 中重現的問題,但當varchar2時不會。

字符比較的文檔解釋了空白填充或非填充比較語義之間的區別。 當您將它們與=進行比較時,因為列和字符串文字都是 `char,所以使用空白填充語義:

使用空白填充語義,如果兩個值的長度不同,則 Oracle 首先將空白添加到較短的末尾,以便它們的長度相等。 ...如果兩個值沒有不同的字符,那么它們被認為是相等的。 此規則意味着如果兩個值僅在尾隨空格的數量上有所不同,則它們是相等的。 Oracle 僅當比較中的兩個值都是數據類型 CHAR、NCHAR、文本文字的表達式或 USER function 返回的值時,才使用空白填充的比較語義。

當列是 `varchar2 時,使用非填充語義:

使用非填充語義,... 如果兩個長度相等的值沒有不同的字符,則認為這些值相等。 只要比較中的一個或兩個值具有數據類型 VARCHAR2 或 NVARCHAR2,Oracle 就會使用非填充比較語義。

LIKE的工作方式不同。 只有您的最終模式與%匹配,因為這允許char值中的尾隨空格,而其他兩種模式則不允許。 對於varchar2版本,其他兩種模式也沒有任何尾隨空格。

需要或想要使用char列是不尋常的; varchar2更常見。 多年前,湯姆·凱特(Tom Kyte)對此提出了看法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM