doc-exports/docs/dws/dev/dws_06_0032.html
Lu, Huayi a24ca60074 DWS DEVELOPER 811 version
Reviewed-by: Hasko, Vladimir <vladimir.hasko@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2023-01-19 13:37:49 +00:00

165 lines
18 KiB
HTML

<a name="EN-US_TOPIC_0000001145710779"></a><a name="EN-US_TOPIC_0000001145710779"></a>
<h1 class="topictitle1">Bit String Functions and Operators</h1>
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001145710779__s44c4ba691e8644a2a6d893b119fcabbb"><h4 class="sectiontitle">Bit string operators</h4><p id="EN-US_TOPIC_0000001145710779__aa936e56e8fba43d28c99007fbd6c1b2f">Aside from the usual comparison operators, the following operators can be used. Bit string operands of <strong id="EN-US_TOPIC_0000001145710779__b84235270694553">&amp;</strong>, <strong id="EN-US_TOPIC_0000001145710779__b8423527069461">|</strong>, and <strong id="EN-US_TOPIC_0000001145710779__b8423527069466">#</strong> must be of equal length. When bit shifting, the original length of the string is preserved by zero padding (if necessary).</p>
<ul id="EN-US_TOPIC_0000001145710779__u56ada5f02dbf43b1aa3c1dc8703910f4"><li id="EN-US_TOPIC_0000001145710779__lbe6f9fdf3cb5410a9bdccda75aabc6f9">||<p id="EN-US_TOPIC_0000001145710779__a1630e7cd39f74322a2b697c29e2a8d8e"><a name="EN-US_TOPIC_0000001145710779__lbe6f9fdf3cb5410a9bdccda75aabc6f9"></a><a name="lbe6f9fdf3cb5410a9bdccda75aabc6f9"></a>Description: Connects bit strings.</p>
<p id="EN-US_TOPIC_0000001145710779__ad92499da5ab64c0da881ab2726d2c9a5">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__sd5c96a609df74ba68922669284e981cf"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">B</span><span class="s1">'011'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"></span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">10001011</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__l3019ff04f1004736bbc4563faebfb95b">&amp;<p id="EN-US_TOPIC_0000001145710779__ad2a791c49d10454586806ba4c188ac86"><a name="EN-US_TOPIC_0000001145710779__l3019ff04f1004736bbc4563faebfb95b"></a><a name="l3019ff04f1004736bbc4563faebfb95b"></a>Description: AND operation between bit strings</p>
<p id="EN-US_TOPIC_0000001145710779__ae8c2d44f44774c6299d07e9ab120ff7e">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__s3991ee554dcb406e8409d3ce24712ede"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="n">B</span><span class="s1">'01101'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------</span>
<span class="w"> </span><span class="mi">00001</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__l7fa489c2966c451d9093ae3f4a806494">|<p id="EN-US_TOPIC_0000001145710779__adcc77d56e8cd40e2abf24db33d3cd939"><a name="EN-US_TOPIC_0000001145710779__l7fa489c2966c451d9093ae3f4a806494"></a><a name="l7fa489c2966c451d9093ae3f4a806494"></a>Description: OR operation between bit strings</p>
<p id="EN-US_TOPIC_0000001145710779__a40f5d6aacc924889b10d9de1693efc0c">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__sf37bb3f61dc0455ebfd22106bc21f48c"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">B</span><span class="s1">'01101'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------</span>
<span class="w"> </span><span class="mi">11101</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__l82dd3a9870ac4a43adbc497387429c0c">#<p id="EN-US_TOPIC_0000001145710779__a2ac7976a31b1471bbda21e9f82e154f7"><a name="EN-US_TOPIC_0000001145710779__l82dd3a9870ac4a43adbc497387429c0c"></a><a name="l82dd3a9870ac4a43adbc497387429c0c"></a>Description: OR operation between bit strings if they are inconsistent. If the same positions in the two bit strings are both 1 or 0, the position returns <strong id="EN-US_TOPIC_0000001145710779__b842352706102316">0</strong>.</p>
<p id="EN-US_TOPIC_0000001145710779__aa8d88108cd2a46e893d6d3b57ed3942d">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__s9b6dc26f22bc41cb81af5fea3e832037"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">#</span><span class="w"> </span><span class="n">B</span><span class="s1">'01101'</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------</span>
<span class="w"> </span><span class="mi">11100</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__lb8918255a81d4f97be4f5ce656f77765">~<p id="EN-US_TOPIC_0000001145710779__acd8a885268bd46fbbb912493fbeda3e8"><a name="EN-US_TOPIC_0000001145710779__lb8918255a81d4f97be4f5ce656f77765"></a><a name="lb8918255a81d4f97be4f5ce656f77765"></a>Description: NOT operation between bit strings</p>
<p id="EN-US_TOPIC_0000001145710779__ad01d86986e464782a8636d6ff567a9c8">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__sce3662f0124a49b88dfd1af0bde69e45"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">~</span><span class="n">B</span><span class="s1">'10001'</span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">01110</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__l6865262056bc49d38b5257f2735565c8">&lt;&lt;<p id="EN-US_TOPIC_0000001145710779__ac324be847a164777bf618745594ff02c"><a name="EN-US_TOPIC_0000001145710779__l6865262056bc49d38b5257f2735565c8"></a><a name="l6865262056bc49d38b5257f2735565c8"></a>Description: binary left shift</p>
<div class="p" id="EN-US_TOPIC_0000001145710779__a0450a4d5280441a1b0f1b675dccf11a3">For example:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__saaa4cc4e1855472fa9bd1c38d1b1e494"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">01000</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</div>
</li><li id="EN-US_TOPIC_0000001145710779__l4ee4f43e22124aa4a0918fa83da92658">&gt;&gt;<p id="EN-US_TOPIC_0000001145710779__ae84015f5b44b499d960a0f45d6fed0ef"><a name="EN-US_TOPIC_0000001145710779__l4ee4f43e22124aa4a0918fa83da92658"></a><a name="l4ee4f43e22124aa4a0918fa83da92658"></a>Description: binary right shift</p>
<p id="EN-US_TOPIC_0000001145710779__afd62aacf4f584eb0b69c7de0acf9be4f">For example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__sa8ac7b6b2f7e4f8dbcd37f6341b30e8b"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">B</span><span class="s1">'10001'</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">00100</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</li></ul>
</div>
<p id="EN-US_TOPIC_0000001145710779__a77019b90969b4f24ad86b46e4e4baf76">The following SQL-standard functions work on bit strings as well as character strings: <strong id="EN-US_TOPIC_0000001145710779__b842352706165116">length</strong>, <strong id="EN-US_TOPIC_0000001145710779__b842352706165122">bit_length</strong>, <strong id="EN-US_TOPIC_0000001145710779__b842352706165129">octet_length</strong>, <strong id="EN-US_TOPIC_0000001145710779__b842352706165133">position</strong>, <strong id="EN-US_TOPIC_0000001145710779__b842352706165139">substring</strong>, and <strong id="EN-US_TOPIC_0000001145710779__b842352706165149">overlay</strong>.</p>
<p id="EN-US_TOPIC_0000001145710779__a13142aedc52e47c1a34e58b04e237134">The following functions work on bit strings as well as binary strings: <strong id="EN-US_TOPIC_0000001145710779__b842352706165245">get_bit</strong> and <strong id="EN-US_TOPIC_0000001145710779__b842352706165257">set_bit</strong>. When working with a bit string, these functions number the first (leftmost) bit of the string as bit 0.</p>
<div class="p" id="EN-US_TOPIC_0000001145710779__a7ac9b35f7fc64c1296921f7105a84fab">In addition, it is possible to convert between integral values and type <strong id="EN-US_TOPIC_0000001145710779__b842352706165414">bit</strong>. For example:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145710779__s84027654c00f4740b10ef532870a8015"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="mi">44</span><span class="p">::</span><span class="nb">bit</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"></span>
<span class="c1">------------</span>
<span class="w"> </span><span class="mi">0000101100</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
<span class="k">SELECT</span><span class="w"> </span><span class="mi">44</span><span class="p">::</span><span class="nb">bit</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------</span>
<span class="w"> </span><span class="mi">100</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
<span class="k">SELECT</span><span class="w"> </span><span class="k">cast</span><span class="p">(</span><span class="o">-</span><span class="mi">44</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">bit</span><span class="p">(</span><span class="mi">12</span><span class="p">))</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------------</span>
<span class="w"> </span><span class="mi">111111010100</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
<span class="k">SELECT</span><span class="w"> </span><span class="s1">'1110'</span><span class="p">::</span><span class="nb">bit</span><span class="p">(</span><span class="mi">4</span><span class="p">)::</span><span class="nb">integer</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="k">RESULT</span><span class="p">;</span><span class="w"></span>
<span class="w"> </span><span class="k">result</span><span class="w"> </span>
<span class="c1">--------</span>
<span class="w"> </span><span class="mi">14</span><span class="w"></span>
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="note" id="EN-US_TOPIC_0000001145710779__n7dbbe60a9d4944e0a81c1c51643b0577"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001145710779__a14a79494497842bdb7d7844266da1089">Casting to just "bit" means casting to bit(1), and so will deliver only the least significant bit of the integer.</p>
</div></div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_06_0027.html">Functions and Operators</a></div>
</div>
</div>