<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>T-SQL</title><link>http://sqlserver.ro/forums/15/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Re: Functia CAST</title><link>http://sqlserver.ro/forums/thread/3478.aspx</link><pubDate>Wed, 28 Nov 2007 06:30:52 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3478</guid><dc:creator>cretzu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3478.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=3478</wfw:commentRss><description>&lt;p&gt;Salut,&lt;/p&gt;&lt;p&gt;Merci pentru solutie.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cu Functia ISNUMERIC am observat si eu ieri niste anomalii pentru ca in anumite cazuri cum ar fi daca acel varchar este null sau daca este '' (stringul vid) face automat ceva conversie si mi-l intoarce ca si 0 :((. &lt;/p&gt;&lt;p&gt;Merci amandorura pentru solutiile date ;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Daniel.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: Functia CAST</title><link>http://sqlserver.ro/forums/thread/3475.aspx</link><pubDate>Tue, 27 Nov 2007 13:57:22 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3475</guid><dc:creator>B_gd_n[ ]Sahlean</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3475.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=3475</wfw:commentRss><description>&lt;p&gt;După cum a scris şi Răzvan, IsNumeric este o funcţie problematică.&lt;/p&gt;&lt;p&gt;Poţi încerca următoarea soluţie care verifică dacă un şir de caractere reprezintă un număr întreg pozitiv.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;



















&lt;p class="MsoNormal"&gt;

&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; TestIsNumeric&lt;span style="color:gray;"&gt;(&lt;/span&gt;Valoare
&lt;span style="color:blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;25&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:blue;"&gt;KEY&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;br&gt;GO&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'123'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;' 123 '&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.1'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'$123'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'12e3'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;br&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt;
TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'12 3'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;INSERT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;INTO&lt;/span&gt; TestIsNumeric &lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'e'&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;br&gt;GO&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:red;"&gt;'['&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;Valoare&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;']'&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; Val&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ISNUMERIC&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;Valoare&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; Is_Numeric&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:gray;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE&lt;/span&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN&lt;/span&gt;
&lt;span style="color:fuchsia;"&gt;LEN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;Valoare&lt;span style="color:gray;"&gt;)))&amp;gt;=&lt;/span&gt;1 AND&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:fuchsia;"&gt;LEN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;Valoare&lt;span style="color:gray;"&gt;)))&amp;lt;=&lt;/span&gt;18 &lt;span style="color:gray;"&gt;AND&lt;/span&gt;&lt;span style="color:fuchsia;"&gt; PATINDEX&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'%[^0-9]%'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;RTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;LTRIM&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;Valoare&lt;span style="color:gray;"&gt;)))=&lt;/span&gt;0 &lt;span style="color:blue;"&gt;THEN&lt;/span&gt; 1&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;ELSE&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; 0&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; Este_Bigint_Pozitiv&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;FROM&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;
TestIsNumeric&lt;br&gt;GO&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Soluţia poate fi adaptată şi pentru valori care includ operatorii unari +/-, inclusiv pentru a putea accepta toate valorile numerice pozitice admise de BIGINT.&lt;br&gt;&lt;/p&gt;</description></item><item><title>Re: Functia CAST</title><link>http://sqlserver.ro/forums/thread/3474.aspx</link><pubDate>Tue, 27 Nov 2007 13:01:03 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3474</guid><dc:creator>cretzu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3474.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=3474</wfw:commentRss><description>&lt;p&gt;merci :)&lt;/p&gt;&lt;p&gt;imi merge cu ISNUMERIC &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Daniel.&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Re: Functia CAST</title><link>http://sqlserver.ro/forums/thread/3473.aspx</link><pubDate>Tue, 27 Nov 2007 12:55:44 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3473</guid><dc:creator>rsocol</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3473.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=3473</wfw:commentRss><description>&lt;p&gt;Eu ţi-aş recomanda să eviţi eroarea (în loc să o tratezi), verificând înainte de conversie dacă acea conversie e posibilă. O modalitate ar fi să foloseşti funcţia ISNUMERIC:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; @x &lt;span style="color:blue;"&gt;AS&lt;/span&gt;
VARCHAR&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;),&lt;/span&gt; @y
&lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; @eroare
&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;255&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET&lt;/span&gt; @x&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'12a3'&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;IF&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;ISNUMERIC&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x&lt;span style="color:gray;"&gt;)&amp;lt;&amp;gt;&lt;/span&gt;0 &lt;span style="color:blue;"&gt;SET&lt;/span&gt; @y &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:blue;"&gt;BIGINT&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;ELSE&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;span style="color:blue;"&gt;SET&lt;/span&gt; @eroare &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;'eroare la conversie'&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; @y&lt;span style="color:gray;"&gt;,&lt;/span&gt;
@eroare&lt;/span&gt;&lt;span&gt;&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;

Dar funcţia ISNUMERIC nu returnează totdeauna ceea ce te aştepţi (încearcă de exemplu cu '.', '$', '1e3', etc). Pentru explicaţii şi soluţii alternative, vezi: &lt;a href="http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html" target="_blank"&gt;http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Răzvan&amp;nbsp;&lt;/p&gt;</description></item><item><title>Functia CAST</title><link>http://sqlserver.ro/forums/thread/3469.aspx</link><pubDate>Tue, 27 Nov 2007 12:24:16 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:3469</guid><dc:creator>cretzu</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/3469.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=15&amp;PostID=3469</wfw:commentRss><description>&lt;p&gt;Salut,&lt;/p&gt;&lt;p&gt;va rog imi poate spune cineva cum as putea prinde o eroare de conversie intoarsa de functia CAST intr-o functie fara sa folosesc TRY CATCH. Incerc sa fie compatibila si cu SQL Server 2000 si cu 2005. Lucrez pe un 2005.&lt;/p&gt;&lt;p&gt;Uitati ce am incercat :)&lt;/p&gt;&lt;p&gt;DECLARE @x AS VARCHAR(50)&lt;/p&gt;&lt;p&gt;....&amp;nbsp;&lt;/p&gt;&lt;p&gt;SELECT @y = CAST(@x AS BIGINT) &lt;/p&gt;&lt;p&gt;IF @@ERROR&amp;nbsp; &amp;lt;&amp;gt; 0&lt;/p&gt;&lt;p&gt;BEGIN &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @eroare = 'eroare la conversie'&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN&lt;/p&gt;&lt;p&gt;END&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>