Hocanın yazdığı sonuncu örneği anlamakta zorluk çekenler için, detaylı anlatmaya çalıştım: İlk önce hocanın nazarından kaçmış olacak ki, küçük bir yanlışı düzelterek yazılmış olan örnekte SUBSTRİNG fonksiyonunun index numralanmasını C#-daki gibi 0-dan değil de, 1-den başlayarak numaralanma yaptığını düzeltelim. Hocam, Substring fonksiyonuna, bu fonksiyonun kuralları gereği ilk önce nereden başlayacağını belirtmiş. Ve sonraki adımda kaç tane karakteri Substring yapacağını bildirmek için, tüm adın içerdiği karakter sayısından, boşluk karakterinin de olduğu yere kadar olan karakter sayısını çıkmış (böylece biz soyismin kaç karakterden oluştuğunu bilebiliriz). Örneğin 'Maria Anders' adından boşluk karakterine kadar olan kısmın çıktısını yaptığımızda, yerde : -----> Maria Anders(12 karakter) - Maria_(6 karakter) = Anders(6 karakter) kalmış olacak. Fakat dikkata almamız gereken nokta var ki, Substring fonksiyonu kodda belirtdiğimiz üzere kesim işlemini CHARINDEX fonksiyonunun boşluk karakterini döndürdüyü yerden başlayarak yapıcak olmasıdır. Yani yukarıdaki örneğe yeniden bakıcak olursak, SUBSTRİNG fonksiyonu burada 'Maria Anders'' isimini A-karakterinden değil de, boşluk karakterinden başlayarak substring yapacaktır. Eğer 'Maria Anders'' ismini boşluk karakterinden başlayarak 6 karakter almış olursak, sonuncu harfi yazdıramayacağızdır (Anders yerine Ander gibi bir çıktı verecektir). Bu işlemin aynısı ne yazık ki, diğer adlar için de geçerli olacaktır. Bunu çözmenin yolu hocanın yazdığının yanı-sıra, CHARINDEX fonksiyonunun bize döndürdüyü rakamın üzerine 1 ekleyerek, substring fonksiyonun bize gereken noktadan (yani 'Maria Anders'' isminde A karakterinden başlayarak) çalışmasını sağlaya biliriz. Böylece soyisimler elimizde tam olarak bulunacaktır. --------> select MusteriAdi, Substring(MusteriAdi, CHARINDEX ( ' ', MusteriAdi)) +1, (LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi))) from Musteriler. İnşallah birileri okuyup faydalana bilir. Çok teşekkürler Gençay Hocam, Allah sizden razı olsun.
Eline sağlık arkadaşım, tek bir queryde Adı ve Soyadı ayrı ayrı sütunlarda gelecek şekilde olan kod da şu şekilde: select MusteriAdi as [Müşteri Adı], SUBSTRING(MusteriAdi, 1, CHARINDEX(' ', musteriadi)) as Adı, Substring(MusteriAdi, CHARINDEX (' ', MusteriAdi)+1, (LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi))) as Soyadı from Musteriler
@@idincern Kardeş seninle iletişime geçe bilmem için bana bir sosyal medya, filan adresi vere bilir misin? Katıl'a özel izleyicilerle ilgili sorularım olacak, mümkünse yardım et.
Ben de müşterinin sadece soyadını yazmak için şöyle bir çözüme ulaştım; Select RIGHT(MusteriAdi, CHARINDEX(' ', REVERSE(MusteriAdi))) from Musteriler Müşteri adının tersten yazılmış halinde boşluk karakterine kadar kaç karakter olduğunu ölçtüm. Çıkan sonuç kadar karakteri de sağdan yazdırdım.
Merhaba; Bu videodaki son örnekte aşağıdaki gibi +1 ekleyince araya, soyadından önceki boşluğu almamış oluyoruz sanırım. select SUBSTRING (MusteriAdi, (CHARINDEX(' ', MusteriAdi)+1), LEN(musteriadi) - (CHARINDEX(' ', MusteriAdi) - 1)) from Musteriler Videolar için teşekkürler.
CHARINDEX farkettiğim kadarıyla 0dan değil 1den başlıyor indexlemeye oradan hesap ederseniz videoda boşluk dahil edildiğinden +1 eklenmezse soyadının son karakteri eksik yazılacaktır.
Merhaba, denediğim kadarıyla substring Indexleri sayarken 0 1 2 diye başlamıyor, 1 2 3 diye sayıyor. Bu yüzden sayıda kelimesini düşünecek olursak ıd yerine yı yazıyor.
Select SUBSTRING(MusteriAdi,CHARINDEX(' ', MusteriAdi) ,LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi)) from Musteriler hocam kodun doğrusu bu değil mi -1 yazmaya çalışıyorum hata veriyor neden fazladan parantez kullandınız
select SUBSTRING(MusteriAdi,CHARINDEX(' ',MusteriAdi),Len(MusteriAdi)-(CharIndex('',MusteriAdi))) from Musteriler ([Hocam bu sekildede calıstı soyisimi son örnek ]
değeri bilinmeyen mükemmel bir kaynak.
Düzeltme: Transact sql de index 1 den başlıyor.
Hocanın yazdığı sonuncu örneği anlamakta zorluk çekenler için, detaylı anlatmaya çalıştım:
İlk önce hocanın nazarından kaçmış olacak ki, küçük bir yanlışı düzelterek yazılmış olan örnekte SUBSTRİNG fonksiyonunun index numralanmasını C#-daki gibi 0-dan değil de, 1-den başlayarak numaralanma yaptığını düzeltelim.
Hocam, Substring fonksiyonuna, bu fonksiyonun kuralları gereği ilk önce nereden başlayacağını belirtmiş. Ve sonraki adımda kaç tane karakteri Substring yapacağını bildirmek için, tüm adın içerdiği karakter sayısından, boşluk karakterinin de olduğu yere kadar olan karakter sayısını çıkmış (böylece biz soyismin kaç karakterden oluştuğunu bilebiliriz).
Örneğin 'Maria Anders' adından boşluk karakterine kadar olan kısmın çıktısını yaptığımızda, yerde :
-----> Maria Anders(12 karakter) - Maria_(6 karakter) = Anders(6 karakter)
kalmış olacak.
Fakat dikkata almamız gereken nokta var ki, Substring fonksiyonu kodda belirtdiğimiz üzere kesim işlemini CHARINDEX fonksiyonunun boşluk karakterini döndürdüyü yerden başlayarak yapıcak olmasıdır. Yani yukarıdaki örneğe yeniden bakıcak olursak, SUBSTRİNG fonksiyonu burada 'Maria Anders'' isimini A-karakterinden değil de, boşluk karakterinden başlayarak substring yapacaktır. Eğer 'Maria Anders'' ismini boşluk karakterinden başlayarak 6 karakter almış olursak, sonuncu harfi yazdıramayacağızdır (Anders yerine Ander gibi bir çıktı verecektir). Bu işlemin aynısı ne yazık ki, diğer adlar için de geçerli olacaktır.
Bunu çözmenin yolu hocanın yazdığının yanı-sıra, CHARINDEX fonksiyonunun bize döndürdüyü rakamın üzerine 1 ekleyerek, substring fonksiyonun bize gereken noktadan (yani 'Maria Anders'' isminde A karakterinden başlayarak) çalışmasını sağlaya biliriz. Böylece soyisimler elimizde tam olarak bulunacaktır.
--------> select MusteriAdi, Substring(MusteriAdi, CHARINDEX ( ' ', MusteriAdi)) +1, (LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi))) from Musteriler.
İnşallah birileri okuyup faydalana bilir. Çok teşekkürler Gençay Hocam, Allah sizden razı olsun.
Eline sağlık arkadaşım, tek bir queryde Adı ve Soyadı ayrı ayrı sütunlarda gelecek şekilde olan kod da şu şekilde:
select MusteriAdi as [Müşteri Adı], SUBSTRING(MusteriAdi, 1, CHARINDEX(' ', musteriadi)) as Adı, Substring(MusteriAdi, CHARINDEX (' ', MusteriAdi)+1, (LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi))) as Soyadı from Musteriler
@@idincern Kardeş seninle iletişime geçe bilmem için bana bir sosyal medya, filan adresi vere bilir misin?
Katıl'a özel izleyicilerle ilgili sorularım olacak, mümkünse yardım et.
Ben de müşterinin sadece soyadını yazmak için şöyle bir çözüme ulaştım;
Select RIGHT(MusteriAdi, CHARINDEX(' ', REVERSE(MusteriAdi))) from Musteriler
Müşteri adının tersten yazılmış halinde boşluk karakterine kadar kaç karakter olduğunu ölçtüm. Çıkan sonuç kadar karakteri de sağdan yazdırdım.
08.02.2024 eğitime devam. Teşekkür ederim. :)
Cok deşekür ederim ))))
Merhaba;
Bu videodaki son örnekte aşağıdaki gibi +1 ekleyince araya, soyadından önceki boşluğu almamış oluyoruz sanırım.
select SUBSTRING (MusteriAdi, (CHARINDEX(' ', MusteriAdi)+1), LEN(musteriadi) - (CHARINDEX(' ', MusteriAdi) - 1)) from Musteriler
Videolar için teşekkürler.
son örnekte -1 neden yazdık anladınız mı acaba o kısmı
EWT KATILIYORUM GÖZDEN KAÇMIŞ GİBİ
CHARINDEX farkettiğim kadarıyla 0dan değil 1den başlıyor indexlemeye oradan hesap ederseniz videoda boşluk dahil edildiğinden +1 eklenmezse soyadının son karakteri eksik yazılacaktır.
Merhaba, denediğim kadarıyla substring Indexleri sayarken 0 1 2 diye başlamıyor, 1 2 3 diye sayıyor. Bu yüzden sayıda kelimesini düşünecek olursak ıd yerine yı yazıyor.
c# ta index 0 dan başlıyor transact sql de 1 den başlıyor ondan dolayı.
hocam son örnekte çıkarmayı yapmamız çok önemli değil aslında uzunluğu kadar gittiği için bize yine soyadı değerlerini veriyor.
Son örnekte sadece select SUBSTRING (MusteriAdi, CHARINDEX(' ',MusteriAdi),LEN(MusteriAdi)) from Musteriler yeterli oluyor zaten
Farklı cevap için
select RIGHT(MusteriAdi,LEN(MusteriAdi)-CHARINDEX(' ',MusteriAdi)) from Musteriler ben bu şekilde yaptım
Tesekkurler
Son örneği açıklayıcı bir şekilde anlatabilir misiniz ?
Select SUBSTRING(MusteriAdi,CHARINDEX(' ', MusteriAdi) ,LEN(MusteriAdi) - CHARINDEX(' ', MusteriAdi)) from Musteriler hocam kodun doğrusu bu değil mi -1 yazmaya çalışıyorum hata veriyor neden fazladan parantez kullandınız
En son yazılan Charindexin önünde parantez var ve hala neden var olduğunu çözemedim
select SUBSTRING(MusteriAdi,CHARINDEX(' ',MusteriAdi),Len(MusteriAdi)-(CharIndex('',MusteriAdi))) from Musteriler ([Hocam bu sekildede calıstı soyisimi son örnek ]