<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Журнал системного программиста &#187; sql</title>
	<atom:link href="http://sadko.xskernel.org/archives/tag/sql/feed" rel="self" type="application/rss+xml" />
	<link>http://sadko.xskernel.org</link>
	<description>блог обо всём и ни о чём</description>
	<lastBuildDate>Wed, 14 Dec 2011 20:21:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Вопрос знатокам СУБД Firebird.</title>
		<link>http://sadko.xskernel.org/archives/1561</link>
		<comments>http://sadko.xskernel.org/archives/1561#comments</comments>
		<pubDate>Thu, 29 Oct 2009 16:31:50 +0000</pubDate>
		<dc:creator>SadKo</dc:creator>
				<category><![CDATA[Кодинг]]></category>
		<category><![CDATA[Свободное ПО]]></category>
		<category><![CDATA[cубд]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[firebird]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://sadko.xskernel.org/?p=1561</guid>
		<description><![CDATA[Tweet Есть СУБД FireBird версии 2.0.x. Есть таблица, в которой одним из полей хранится битовая карта дней недели. Задача: проверить, входит ли день недели (номер 1-7) в битовую карту. Я понимаю, что в СУБД FireBird 2.1.x были введены операции BIT_xx, но использовать пока приходится только FireBird 2.0.x. Вот моё решение (отмечу, что MATCH=NULL тождественно всем [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin: 0 0 5px 10px; " class="vk-button">
<!-- vkontakte share button -->
<script type="text/javascript">
<!--
document.write(VK.Share.button(
{
  url: 'http://sadko.xskernel.org/archives/1561',
  title: 'Вопрос знатокам СУБД Firebird.',
  description: 'Есть СУБД FireBird версии 2.0.x.\nЕсть таблица, в которой одним из полей хранится битовая карта дней недели.\nЗадача: проверить, входит ли день недели (номер 1-7) в битовую карту.\nЯ понимаю, что в СУБД FireB...',
  noparse: true 
}, 
{
  type: 'button',
  text: 'Скопировать'
}));
-->
</script>
<!-- / vkontakte share button -->
</div><div style="height:21px; padding-top:2px;" class="really_simple_share"><div style="float:left; " class="really_simple_share_linkedin"> 
				<script type="text/javascript" src="http://platform.linkedin.com/in.js"></script>
				<script type="in/share" data-counter="right" data-url="http://sadko.xskernel.org/archives/1561"></script>
			</div><div style="float:left; padding-left:10px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="&ETH;&ETH;&frac34;&ETH;&iquest;&Ntilde;&ETH;&frac34;&Ntilde; &ETH;&middot;&ETH;&frac12;&ETH;&deg;&Ntilde;&ETH;&frac34;&ETH;&ordm;&ETH;&deg;&ETH;&frac14; &ETH;&iexcl;&ETH;&pound;&ETH;&ETH; Firebird." data-url="http://sadko.xskernel.org/archives/1561">Tweet</a> 
				<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> 
			</div></div>
	<br style="clear:both;" /><p>Есть СУБД FireBird версии 2.0.x.<br />
Есть таблица, в которой одним из полей хранится битовая карта дней недели.<br />
Задача: проверить, входит ли день недели (номер 1-7) в битовую карту.<br />
Я понимаю, что в СУБД FireBird 2.1.x были введены операции BIT_xx, но использовать пока приходится только FireBird 2.0.x.<br />
Вот моё решение (отмечу, что MATCH=NULL тождественно всем дням недели, установленным в 1):</p>

<div class="wp_codebox"><table><tr id="p15612"><td class="code" id="p1561code2"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SET</span> TERM ^ ;
&nbsp;
<span style="color: #808080; font-style: italic;">-- Validate week day match</span>
<span style="color: #808080; font-style: italic;">--   param:   _MASK - week day mask</span>
<span style="color: #808080; font-style: italic;">--   param:   _VALUE - day of month (1-7)</span>
<span style="color: #808080; font-style: italic;">--   return:  _RESULT - match result: match type or NULL if no match</span>
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">ALTER</span> PROCEDURE FN_SCHEDULED_WEEKDAY_MATCH <span style="color: #66cc66;">&#40;</span>
    <span style="color: #ff0000;">&quot;_MASK&quot;</span> INTEGER<span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">&quot;_VALUE&quot;</span> INTEGER
<span style="color: #66cc66;">&#41;</span>
RETURNS <span style="color: #66cc66;">&#40;</span>
    <span style="color: #ff0000;">&quot;_RESULT&quot;</span> INTEGER <span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">AS</span>
    DECLARE VARIABLE <span style="color: #ff0000;">&quot;_TEST&quot;</span> INTEGER;
BEGIN
    <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span> <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> THEN
        BEGIN
            <span style="color: #808080; font-style: italic;">-- Binary functions are available only in FB 2.1, need to make workaround</span>
            <span style="color: #ff0000;">&quot;_MASK&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;_MASK&quot;</span> <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">128</span>; <span style="color: #808080; font-style: italic;">-- For comparisons</span>
&nbsp;
            <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Monday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Tuesday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Wednesday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Thursday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Friday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">6</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Saturday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
            ELSE <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_VALUE&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;_MASK&quot;</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> THEN <span style="color: #808080; font-style: italic;">-- Sunday</span>
                <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>;
        END
    ELSE
        <span style="color: #ff0000;">&quot;_RESULT&quot;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">-- Suspend for select</span>
    SUSPEND;
END^
&nbsp;
<span style="color: #993333; font-weight: bold;">SET</span> TERM ; ^</pre></td></tr></table></div>

<p>Есть предложения лучше?</p>
]]></content:encoded>
			<wfw:commentRss>http://sadko.xskernel.org/archives/1561/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

