<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SQL on Quietbo</title><link>https://quietbo.com/tags/sql/</link><description>Recent content in SQL on Quietbo</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><lastBuildDate>Fri, 10 Dec 2021 08:27:31 +0000</lastBuildDate><atom:link href="https://quietbo.com/tags/sql/index.xml" rel="self" type="application/rss+xml"/><item><title>[SQL] 萬用字元與escape的用法(必知)</title><link>https://quietbo.com/2021/12/10/sql-%E8%90%AC%E7%94%A8%E5%AD%97%E5%85%83%E8%88%87escape%E7%9A%84%E7%94%A8%E6%B3%95/</link><pubDate>Fri, 10 Dec 2021 08:27:31 +0000</pubDate><guid>https://quietbo.com/2021/12/10/sql-%E8%90%AC%E7%94%A8%E5%AD%97%E5%85%83%E8%88%87escape%E7%9A%84%E7%94%A8%E6%B3%95/</guid><description>&lt;div id="ez-toc-container" class="ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction"&gt;
 &lt;div class="ez-toc-title-container"&gt;
 &lt;p class="ez-toc-title" style="cursor:inherit"&gt;
 Table of Contents
 &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&amp;quot;ez-toc-title-toggle&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle&amp;quot; aria-label=&amp;quot;顯示/隱藏內容目錄&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-js-icon-con&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;eztoc-hide&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;Toggle&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;ez-toc-icon-toggle-span&amp;quot;&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; class=&amp;quot;list-377408&amp;quot; width=&amp;quot;20px&amp;quot; height=&amp;quot;20px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z&amp;quot; fill=&amp;quot;currentColor&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;svg style=&amp;quot;fill: #999;color:#999&amp;quot; class=&amp;quot;arrow-unsorted-368013&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;10px&amp;quot; height=&amp;quot;10px&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; version=&amp;quot;1.2&amp;quot; baseProfile=&amp;quot;tiny&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;nav&gt;
 &lt;ul class='ez-toc-list ez-toc-list-level-1 ' &gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-1" href="https://quietbo.com/2021/12/10/sql-%e8%90%ac%e7%94%a8%e5%ad%97%e5%85%83%e8%88%87escape%e7%9a%84%e7%94%a8%e6%b3%95/#%E8%90%AC%E7%94%A8%E5%AD%97%E5%85%83%E7%94%A8%E6%B3%95" &gt;萬用字元用法&lt;/a&gt;&lt;ul class='ez-toc-list-level-3' &gt;
 &lt;li class='ez-toc-heading-level-3'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-2" href="https://quietbo.com/2021/12/10/sql-%e8%90%ac%e7%94%a8%e5%ad%97%e5%85%83%e8%88%87escape%e7%9a%84%e7%94%a8%e6%b3%95/#%E3%80%81%E3%80%81%E5%8F%8A1%E7%9A%84%E5%9B%9B%E7%A8%AE%E7%AF%84%E4%BE%8B" &gt;[、]、[]及[1]的四種範例:&lt;/a&gt;
 &lt;/li&gt;
 &lt;li class='ez-toc-page-1 ez-toc-heading-level-3'&gt;
 &lt;a class="ez-toc-link ez-toc-heading-3" href="https://quietbo.com/2021/12/10/sql-%e8%90%ac%e7%94%a8%e5%ad%97%e5%85%83%e8%88%87escape%e7%9a%84%e7%94%a8%e6%b3%95/#%E4%BD%BF%E7%94%A8_like_%E5%8C%B9%E9%85%8D%E7%89%B9%E6%AE%8A%E5%AD%97%E5%85%83" &gt;使用 like [] 匹配特殊字元&lt;/a&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/li&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;li class='ez-toc-page-1 ez-toc-heading-level-2'&amp;gt;
 &amp;lt;a class=&amp;quot;ez-toc-link ez-toc-heading-4&amp;quot; href=&amp;quot;https://quietbo.com/2021/12/10/sql-%e8%90%ac%e7%94%a8%e5%ad%97%e5%85%83%e8%88%87escape%e7%9a%84%e7%94%a8%e6%b3%95/#escape%E7%9A%84%E7%94%A8%E6%B3%95&amp;quot; &amp;gt;escape的用法&amp;lt;/a&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
 &lt;/ul&gt;&lt;/nav&gt;
&lt;/div&gt;
&lt;h2 id="萬用字元用法"&gt;&lt;span class="ez-toc-section" id="%E8%90%AC%E7%94%A8%E5%AD%97%E5%85%83%E7%94%A8%E6%B3%95"&gt;&lt;/span&gt;萬用字元用法&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;ul class="wp-block-list"&gt;
 &lt;li&gt;
 %：匹配零個及多個任意字元
 &lt;/li&gt;
 &lt;li&gt;
 _ &lt;em&gt;：與任意1個單字元匹配，包含&lt;/em&gt;
 &lt;/li&gt;
 &lt;li&gt;
 []：匹配一個範圍
 &lt;/li&gt;
 &lt;li&gt;
 [^]：排除一個範圍
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;字串中出現的特殊字元：&lt;code&gt;%&amp;lt;strong&amp;gt; [ [] _&amp;lt;/strong&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;可以使用 ‘[]’ 把特殊字元包起來，這些特殊字元就被當作普通字元對待了。&lt;/p&gt;
&lt;h3 id="及1的四種範例"&gt;&lt;span class="ez-toc-section" id="%E3%80%81%E3%80%81%E5%8F%8A1%E7%9A%84%E5%9B%9B%E7%A8%AE%E7%AF%84%E4%BE%8B"&gt;&lt;/span&gt;[、]、[]及[1]的四種範例:&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h3&gt;&lt;p&gt;以下SQL使用 like [] 匹配特殊字元 [ 與 []&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql line-numbers"&gt;-- 使用[[]
select 1 where '[TEST' like '[[]%'; -- 1
select 1 where 'TEST[' like '%[[]'; -- 1

-- 這邊的]是不需要包起來，只需要寫在like內即可
select 1 where 'TEST]' like '%]'; -- 1
select 1 where ']TEST' like ']%'; -- 1

-- 使用[[]]
select 1 where '[]TEST' like '[[]]%%'; -- 1

-- 稍微複雜一點包法，前面的[1]要用[[]1]包
select 1 where '[1]TEST' like '[[]1]%%'; -- 1&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="使用-like--匹配特殊字元"&gt;&lt;span class="ez-toc-section" id="%E4%BD%BF%E7%94%A8_like_%E5%8C%B9%E9%85%8D%E7%89%B9%E6%AE%8A%E5%AD%97%E5%85%83"&gt;&lt;/span&gt;使用 like [&lt;em&gt;] 匹配特殊字元&lt;/em&gt;&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h3&gt;&lt;p&gt;原本 _ 的功能是與任意單字元匹配，&lt;br&gt;
如果想搜尋是DB_開頭的話，使用單純的_又會把DBa、DBb什麼db開頭的家人都找出來，變模糊搜尋了。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql line-numbers"&gt;--原本:
select 1 where 'DB_' like '___'; -- 1
select 1 where 'DBa' like '___'; -- 1
select 1 where 'DBb' like '___'; -- 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果確定只要DB_開頭，就必須把_用[]包起來，這樣其他的就找不到了!&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql"&gt;select 1 where 'DBatest' like 'db[_]%'; -- 無
select 1 where 'DBbtest' like 'db[_]%'; -- 無
select 1 where 'DB_test' like 'db[_]%'; -- 1&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="escape的用法"&gt;&lt;span class="ez-toc-section" id="escape%E7%9A%84%E7%94%A8%E6%B3%95"&gt;&lt;/span&gt;escape的用法&lt;span class="ez-toc-section-end"&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;escape要與Like一起使用，定義轉義符&lt;br&gt;
若不使用[]包住%，來搜尋’10%’，也許會很直覺的使用&lt;code&gt;like '10%'&lt;/code&gt;&lt;br&gt;
但這樣會把100%、101%、1000%等10開頭都搜尋到，與預期結果不符。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql line-numbers"&gt;SELECT 1 WHERE '100%' LIKE '10%'; -- 1
SELECT 1 WHERE '101%' LIKE '10%'; -- 1
SELECT 1 WHERE '102%' LIKE '10%'; -- 1
SELECT 1 WHERE '10000%' LIKE '10%'; -- 1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下方指令是使用escape來尋找真正的%&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql line-numbers"&gt; SELECT 1 WHERE '10%' LIKE '10/%' ESCAPE '/' ;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上方的是指定用’/’符號來說明，後面的萬用符轉成普通字符(單純的百分比%)，&lt;br&gt;
如果同時要尋找/的話呢?例如日期常使用到的/&lt;br&gt;
一般沒有使用ESCAPE的話，可能直接打上日期(下方第一個)搜尋，&lt;br&gt;
若加入 ESCAPE ‘/’ ，要使用2個/，這樣才能符合。&lt;/p&gt;
&lt;pre class="wp-block-code"&gt;&lt;code lang="sql" class="language-sql line-numbers"&gt;SELECT 1 WHERE '2021/12/31' LIKE '2021/12/31'; -- 1
SELECT 1 WHERE '2021/12/31' LIKE '2021//12//31' ESCAPE '/'; -- 1
SELECT 1 WHERE 'MSSQL/50%' LIKE 'MSSQL/50%' ESCAPE '/'; -- 0
SELECT 1 WHERE 'MSSQL/50%' LIKE 'MSSQL//50/%' ESCAPE '/'; -- 1&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>