{"id":105,"date":"2011-10-04T13:48:00","date_gmt":"1970-01-01T00:00:00","guid":{"rendered":"http:\/\/www.yazilimmutfagi.com\/?p=105"},"modified":"2011-10-04T13:48:00","modified_gmt":"1970-01-01T00:00:00","slug":"sql-serverda-alfanumerik-karakterlerin-temizlenmesi","status":"publish","type":"post","link":"https:\/\/www.yazilimmutfagi.com\/index.php\/2011\/10\/04\/sql-serverda-alfanumerik-karakterlerin-temizlenmesi\/","title":{"rendered":"SQL Serverda Alfanumerik Karakterlerin Temizlenmesi"},"content":{"rendered":"<p>Numerik karakter almasini istedigimiz bir kolon i&ccedil;inde alfanumerik karakterlerin atilmis olmasi durumu her zaman bas agrisina sebep olur. Veritabanini yanlis tasarlanmasindan dolayi bu t&uuml;r sorunlarla her zaman karsilabiliyoruz. Bu durumdada join islemlerimizde veya metematiksel islemlerde hata aliriz.<\/p>\n<p>Alfanumerik degerler bulunduran bir kolon i&ccedil;indeki alfanumerik karakterleri temizlemek i&ccedil;in sql serverda bir ka&ccedil; farkli method kullanabiliriz. Bu makalemizde bu &ouml;rneklerden 2 tanesini paylasacagim.<\/p>\n<p>Ilk olarak karakterin ascii degerini veren ASCII fonksiyonunu kullanarak bir degiskendeki alfanumerik karakerleri temizleyecegiz.<\/p>\n<p>ASCII fonksiyonu tek bir parametre alir ve i&ccedil;ine yazilan varchar degerin ilk karakterine ait ASCII degeri verir. A-Z arasindaki ascii degerlerin disinda kalan karakterleri temizledigimiz zaman degeri sadece numerik karakterlerden olusmus hale getirecegiz.<\/p>\n<p><a href='www.yazilimmutfagi.com'>.<\/a><\/p>\n<h4>Alfanumerik degerleri ASCII fonksiyonunu kullanarak temizleme:<\/h4>\n<p><code>\n<div class=\"code\">declare @metin varchar(100) <br \/>\nset @metin = 'Yaz1234Mut987' <br \/>\ndeclare @uzunluk int= len(@metin) <br \/>\ndeclare @i int=1 <br \/>\n<br \/>\ndeclare @temizMetin varchar(max) <br \/>\nset @temizMetin = '' --yeni degeri atayacagimiz metin <br \/>\nwhile @i&lt;=@uzunluk  <br \/>\nbegin  <br \/>\n&nbsp;if ASCII(SUBSTRING(@metin,@i,1))&gt;=48 and ASCII(SUBSTRING(@metin,@i,1))&lt;=57  <br \/>\n&nbsp;--48 ile 57 arasinda ascii degeri olan karakterler 0-9 araligidir. <br \/>\n&nbsp;begin <br \/>\n&nbsp;&nbsp;set @temizMetin=@temizMetin+SUBSTRING(@metin,@i,1)  <br \/>\n&nbsp;&nbsp;-- 0-9 arasindaki degerleri sirasi ile yeni metne ekliyoruz. <br \/>\n&nbsp;&nbsp;--b&ouml;ylece 0-9 arasinda olmayan karakterleri almamis oluyoruz. <br \/>\n&nbsp;&nbsp;end <br \/>\n&nbsp;set @i=@i+1 <br \/>\nend <br \/>\nprint @temizMetin<\/div>\n<\/code><\/p>\n<p>Yukaridaki sogu sonucunda &#8216;Yaz1234Mut987&#8217; olarak verilen string deger &#8216;1234987&#8217; olarak &ccedil;ikar. B&ouml;ylece alfanumerik karakterleri temizlemik olduk.<\/p>\n<h4>Alfanumerik Karakterlerin ASCII kodlari (A-Z ve a-z):<\/h4>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"reference\">\n    <tbody>\n        <tr>\n            <th>asciiDegeri<\/th>\n            <th>karakter<\/th>\n            <th>asciiDegeri<\/th>\n            <th>karakter<\/th>\n        <\/tr>\n        <tr>\n            <td>65<\/td>\n            <td>A<\/td>\n            <td>94<\/td>\n            <td>^<\/td>\n        <\/tr>\n        <tr>\n            <td>66<\/td>\n            <td>B<\/td>\n            <td>95<\/td>\n            <td>_<\/td>\n        <\/tr>\n        <tr>\n            <td>67<\/td>\n            <td>C<\/td>\n            <td>96<\/td>\n            <td>`<\/td>\n        <\/tr>\n        <tr>\n            <td>68<\/td>\n            <td>D<\/td>\n            <td>97<\/td>\n            <td>a<\/td>\n        <\/tr>\n        <tr>\n            <td>69<\/td>\n            <td>E<\/td>\n            <td>98<\/td>\n            <td>b<\/td>\n        <\/tr>\n        <tr>\n            <td>70<\/td>\n            <td>F<\/td>\n            <td>99<\/td>\n            <td>c<\/td>\n        <\/tr>\n        <tr>\n            <td>71<\/td>\n            <td>G<\/td>\n            <td>100<\/td>\n            <td>d<\/td>\n        <\/tr>\n        <tr>\n            <td>72<\/td>\n            <td>H<\/td>\n            <td>101<\/td>\n            <td>e<\/td>\n        <\/tr>\n        <tr>\n            <td>73<\/td>\n            <td>I<\/td>\n            <td>102<\/td>\n            <td>f<\/td>\n        <\/tr>\n        <tr>\n            <td>74<\/td>\n            <td>J<\/td>\n            <td>103<\/td>\n            <td>g<\/td>\n        <\/tr>\n        <tr>\n            <td>75<\/td>\n            <td>K<\/td>\n            <td>104<\/td>\n            <td>h<\/td>\n        <\/tr>\n        <tr>\n            <td>76<\/td>\n            <td>L<\/td>\n            <td>105<\/td>\n            <td>i<\/td>\n        <\/tr>\n        <tr>\n            <td>77<\/td>\n            <td>M<\/td>\n            <td>106<\/td>\n            <td>j<\/td>\n        <\/tr>\n        <tr>\n            <td>78<\/td>\n            <td>N<\/td>\n            <td>107<\/td>\n            <td>k<\/td>\n        <\/tr>\n        <tr>\n            <td>79<\/td>\n            <td>O<\/td>\n            <td>108<\/td>\n            <td>l<\/td>\n        <\/tr>\n        <tr>\n            <td>80<\/td>\n            <td>P<\/td>\n            <td>109<\/td>\n            <td>m<\/td>\n        <\/tr>\n        <tr>\n            <td>81<\/td>\n            <td>Q<\/td>\n            <td>110<\/td>\n            <td>n<\/td>\n        <\/tr>\n        <tr>\n            <td>82<\/td>\n            <td>R<\/td>\n            <td>111<\/td>\n            <td>o<\/td>\n        <\/tr>\n        <tr>\n            <td>83<\/td>\n            <td>S<\/td>\n            <td>112<\/td>\n            <td>p<\/td>\n        <\/tr>\n        <tr>\n            <td>84<\/td>\n            <td>T<\/td>\n            <td>113<\/td>\n            <td>q<\/td>\n        <\/tr>\n        <tr>\n            <td>85<\/td>\n            <td>U<\/td>\n            <td>114<\/td>\n            <td>r<\/td>\n        <\/tr>\n        <tr>\n            <td>86<\/td>\n            <td>V<\/td>\n            <td>115<\/td>\n            <td>s<\/td>\n        <\/tr>\n        <tr>\n            <td>87<\/td>\n            <td>W<\/td>\n            <td>116<\/td>\n            <td>t<\/td>\n        <\/tr>\n        <tr>\n            <td>88<\/td>\n            <td>X<\/td>\n            <td>117<\/td>\n            <td>u<\/td>\n        <\/tr>\n        <tr>\n            <td>89<\/td>\n            <td>Y<\/td>\n            <td>118<\/td>\n            <td>v<\/td>\n        <\/tr>\n        <tr>\n            <td>90<\/td>\n            <td>Z<\/td>\n            <td>119<\/td>\n            <td>w<\/td>\n        <\/tr>\n        <tr>\n            <td>91<\/td>\n            <td>[<\/td>\n            <td>120<\/td>\n            <td>x<\/td>\n        <\/tr>\n        <tr>\n            <td>92<\/td>\n            <td>\\<\/td>\n            <td>121<\/td>\n            <td>y<\/td>\n        <\/tr>\n        <tr>\n            <td>93<\/td>\n            <td>]<\/td>\n            <td>122<\/td>\n            <td>z<\/td>\n        <\/tr>\n    <\/tbody>\n<\/table>\n<p>Sizde Yukaridaki tabloyu asagidaki sorgu ile olusturabilirsiniz.<\/p>\n<p><a href='www.yazilimmutfagi.com'>.<\/a> <code>\n<div class=\"code\">declare  @Table Table  (asciiDegeri int,karakter char) <br \/>\ndeclare @asciiDeger int <br \/>\nset @asciiDeger = 65 <br \/>\nwhile @asciiDeger &lt;= 122 <br \/>\nbegin <br \/>\n&nbsp;&nbsp;insert into @Table values(@asciiDeger ,char(@asciiDeger)) <br \/>\n&nbsp;&nbsp;set @asciiDeger  = @asciiDeger+1 <br \/>\nend <br \/>\nselect * from @Table<\/div>\n<\/code><\/p>\n<p>Simdi Alfanumerik Karakterleri temizlemenin diger bir y&ouml;ntemine bakalim. Bu metodda ise PARHINDEX ve STUFF fonksiyonlarini kullanacagiz. PATHINDEX fonksiyonu, bir metin i&ccedil;inde istedigimiz paterne uyan bir deger varsa bunun indexini d&ouml;nd&uuml;r&uuml;r. STUFF ise bir metin i&ccedil;inde belirli bir indexdeki degeri baska bir degerle degistirmek i&ccedil;in kullanilir.<\/p>\n<p><code>\n<div class=\"code\">DECLARE @metin VARCHAR(32) <br \/>\nDECLARE @i int <br \/>\nSELECT  @metin = '9$%sabri45623 *6%}@~:' <br \/>\nSELECT  @i = PATINDEX('%[^0-9]%', @metin) <br \/>\nWHILE @i &gt; 0 <br \/>\nBEGIN <br \/>\n&nbsp;&nbsp;SELECT @metin = STUFF(@metin, @i, 1, '') <br \/>\n&nbsp;&nbsp;SELECT @i = PATINDEX('%[^0-9]%', @metin) <br \/>\n&nbsp;&nbsp;--[^0-9] ifadesi 0 ile 9 arasinda olmayan anlamina geliyor. <br \/>\nEND <br \/>\nSELECT @metin<\/div>\n<\/code><\/p>\n<p>Yukaridaki sorgu sonucunda &#8216;9$%sabri45623 *6%}@~:&#8217; ifadesi &#8216;9456236&#8217; olarak alfanumerik karakterlerden temizlenmis oldu.<\/p>\n<p><a href='www.yazilimmutfagi.com'>.<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Numerik karakter almasini istedigimiz bir kolon i&#231;inde alfanumerik karakterlerin atilmis olmasi durumu her zaman bas agrisina sebep olur. Veritabanini yanlis tasarlanmasindan dolayi bu t&#252;r sorunlarla her zaman karsilabiliyoruz. Bu durumdada join islemlerimizde veya metematiksel islemlerde hata aliriz<\/p>\n","protected":false},"author":517,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[422],"tags":[4301,5214,5648,4472,5773,6025,6108,5053],"_links":{"self":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/105"}],"collection":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/users\/517"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/comments?post=105"}],"version-history":[{"count":0,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}