<?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>Le blog de SQLpro &#187; générateur aléatoire</title>
	<atom:link href="https://blog.developpez.com/sqlpro/ptag/generateur-aleatoire/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/sqlpro</link>
	<description>Le SQL pour SQL Server, PostGreSQL et tous les autres SGBDR</description>
	<lastBuildDate>Thu, 15 Oct 2020 12:59:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Génération aléatoire de mots et phrases en SQL</title>
		<link>https://blog.developpez.com/sqlpro/p11426/ms-sql-server/generation-aleatoire-de-mots-et-phrases-en-sql</link>
		<comments>https://blog.developpez.com/sqlpro/p11426/ms-sql-server/generation-aleatoire-de-mots-et-phrases-en-sql#comments</comments>
		<pubDate>Thu, 11 Oct 2012 08:04:48 +0000</pubDate>
		<dc:creator><![CDATA[SQLpro]]></dc:creator>
				<category><![CDATA[MS SQL Server]]></category>
		<category><![CDATA[SQL Server 2000]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[générateur aléatoire]]></category>
		<category><![CDATA[mot]]></category>
		<category><![CDATA[phrase]]></category>
		<category><![CDATA[SQL server]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/sqlpro/?p=226</guid>
		<description><![CDATA[Deux petites fonctions MS SQL Server pour créer des mots et phrases en &#171;&#160;bolobolo&#160;&#187; c&#8217;est à dire avec une vraisemblance importante par rapport au français. Ces fonctions utilisent une table de fréquence de représentation des lettres dans la langue française, incluant la fréquence d&#8217;apparition de l&#8217;espace comme séparateur de mots. Voici la table qui est [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Deux petites fonctions MS SQL Server pour créer des mots et phrases en &laquo;&nbsp;bolobolo&nbsp;&raquo; c&rsquo;est à dire avec une vraisemblance importante par rapport au français.<br />
<span id="more-226"></span><br />
Ces fonctions utilisent une table de fréquence de représentation des lettres dans la langue française, incluant la fréquence d&rsquo;apparition de l&rsquo;espace comme séparateur de mots.<br />
Voici la table qui est utilisé pour stocker les fréquences d&rsquo;apparition des lettres en français :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE TABLE T_CHR<br />
(CHR_ID &nbsp; &nbsp; SMALLINT NOT NULL PRIMARY KEY, <br />
&nbsp;CHR_CHAR &nbsp; CHAR(1) NOT NULL UNIQUE,<br />
&nbsp;CHR_NB &nbsp; &nbsp; INT,<br />
&nbsp;CHR_MIN &nbsp; &nbsp;INT,<br />
&nbsp;CHR_MAX &nbsp; &nbsp;INT);<br />
GO</div></div>
<p>Et notre échantillon :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">INSERT INTO T_CHR VALUES<br />
(0, ' ','322270', '1533912', '1856181'),<br />
(1, 'e','225947', '1307965', '1533911'),<br />
(2, 's','121895', '1186070', '1307964'),<br />
(3, 'a','117110', '1068960', '1186069'),<br />
(4, 'i','115465', '953495', '1068959'),<br />
(5, 't','111103', '842392', '953494'),<br />
(6, 'n','108812', '733580', '842391'),<br />
(7, 'r','100500', '633080', '733579'),<br />
(8, 'u','96785', '536295', '633079'),<br />
(9, 'l','83668', '452627', '536294'),<br />
(10, 'o','82762', '369865', '452626'),<br />
(11, 'd','56269', '313596', '369864'),<br />
(12, 'c','50003', '263593', '313595'),<br />
(13, 'p','46335', '217258', '263592'),<br />
(14, 'm','45521', '171737', '217257'),<br />
(15, 'é','29206', '142531', '171736'),<br />
(16, 'v','24975', '117556', '142530'),<br />
(17, 'q','20889', '96667', '117555'),<br />
(18, 'f','16351', '80316', '96666'),<br />
(19, 'b','13822', '66494', '80315'),<br />
(20, 'g','13288', '53206', '66493'),<br />
(21, 'h','11298', '41908', '53205'),<br />
(22, 'j','8351', '33557', '41907'),<br />
(23, 'à','7449', '26108', '33556'),<br />
(24, 'x','5928', '20180', '26107'),<br />
(25, 'y','4725', '15455', '20179'),<br />
(26, 'è','4160', '11295', '15454'),<br />
(27, 'ê','3445', '7850', '11294'),<br />
(28, 'z','2093', '5757', '7849'),<br />
(29, 'w','1747', '4010', '5756'),<br />
(30, 'ç','1306', '2704', '4009'),<br />
(31, 'ù','890', '1814', '2703'),<br />
(32, 'k','745', '1069', '1813'),<br />
(33, 'î','695', '374', '1068'),<br />
(34, 'œ','283', '91', '373'),<br />
(35, 'ï','84', '7', '90'),<br />
(36, 'ë','7', '0', '6');<br />
GO</div></div>
<p>Au passage indexons correctement notre table :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE INDEX X_CHR_MINMAX ON T_CHR(CHR_MIN, CHR_MAX);<br />
GO</div></div>
<p>Nous avons besoin de cette vue, car notre fonction de génération ne peut pas utiliser directement l&rsquo;appel à la fonction RAND() non déterministe</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE VIEW V_RAND<br />
AS<br />
SELECT RAND() AS RND<br />
GO</div></div>
<p>Voici maintenant une fonction qui génère un mot (donc une chaine sans espace) :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE FUNCTION dbo.F_GET_ALEA_FMOT(@NBLET TINYINT)<br />
RETURNS VARCHAR(256)<br />
AS<br />
BEGIN<br />
&nbsp; &nbsp;DECLARE @I INT, @M INT, @C CHAR(1), @S VARCHAR(max);<br />
&nbsp; &nbsp;SELECT @I = 1, @S = '';<br />
&nbsp; &nbsp;SELECT @M = CHR_MIN - 1 FROM T_CHR WHERE CHR_CHAR = ' ';<br />
&nbsp; &nbsp;WHILE @I &amp;lt; @NBLET<br />
&nbsp; &nbsp;BEGIN<br />
&nbsp; &nbsp; &nbsp; SELECT @C = CHR_CHAR <br />
&nbsp; &nbsp; &nbsp; FROM &nbsp; T_CHR <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INNER JOIN V_RAND<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON RND * @M BETWEEN CHR_MIN AND CHR_MAX;<br />
&nbsp; &nbsp; &nbsp; SELECT @S = @S + @C, @I = @I + 1;<br />
&nbsp; &nbsp;END<br />
&nbsp; &nbsp;RETURN @S<br />
END;<br />
GO</div></div>
<p>Et voici la fonction qui génère une phrase composées de mots séparés par des espaces :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE FUNCTION dbo.F_GET_ALEA_FPHRASE(@NBLET TINYINT)<br />
RETURNS VARCHAR(max)<br />
AS<br />
BEGIN<br />
&nbsp; &nbsp;DECLARE @I INT, @M INT, @C CHAR(1), @S VARCHAR(max), @B BIT;<br />
&nbsp; &nbsp;SELECT @I = 1, @S = '', @B = 1;<br />
&nbsp; &nbsp;SELECT @M = CHR_MAX FROM T_CHR WHERE CHR_CHAR = ' ';<br />
&nbsp; &nbsp;WHILE @I &amp;lt; @NBLET<br />
&nbsp; &nbsp;BEGIN<br />
&nbsp; &nbsp; &nbsp; SELECT @C = CHR_CHAR <br />
&nbsp; &nbsp; &nbsp; FROM &nbsp; T_CHR <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INNER JOIN V_RAND<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON RND * @M BETWEEN CHR_MIN AND CHR_MAX;<br />
&nbsp; &nbsp; &nbsp; IF @B = 1 AND @C = &amp;#039; &amp;#039;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CONTINUE; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; SELECT @S = @S + @C, @I = @I + 1;<br />
&nbsp; &nbsp; &nbsp; SET @B = CASE @C WHEN &amp;#039; &amp;#039; THEN 1 ELSE 0 END;<br />
&nbsp; &nbsp;END<br />
&nbsp; &nbsp;RETURN @S<br />
END;<br />
GO</div></div>
<p>Et voici comment tester le tout :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SELECT dbo.F_GET_ALEA_FMOT(8), dbo.F_GET_ALEA_FPHRASE(250)</div></div>
<p>Ceci génère un mot aléatoire de 8 lettres et une phrase limitée à 250 caractères.</p>
<p><strong>Frédéric Brouard, SQLpro &#8211; ARCHITECTE DE DONNÉES, <a href="http://sqlpro.developpez.com/">http://sqlpro.developpez.com</a><br />
<img src="http://blog.developpez.com/media/Microsoft_MVP_logo_vertical Brouard 400.jpg" width="400" height="135" alt="MVP Microsoft SQL Server" /><br />
<em>Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server<br />
<a href="http://www.sqlspot.com">www.sqlspot.com</a>  :  modélisation, conseil, audit, optimisation, tuning, formation&#8230;<br />
* * * * * *  Enseignant CNAM PACA &#8211; ISEN Toulon &#8211; CESI Aix en Provence  * * * * * *</em></strong></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
