• 07-05-2013, 15:21:03
    #1
    Merhaba, bir konuda mysql hakkında bilgili arkadaşlardan yardım isteyeceğim. Veritabanında user tablosunda full_name kısmında siteye üye olurken Tam Ad girildiğinde girilen kelimelerin ilk harfinin büyük olmasını istiyorum, örneğin ali furkan yılmaz yazıldığında full_name kısmına otomatik olarak Ali Furkan Yılmaz olarak girilmeli. Bunu sağlayabileceğim bir ayar, kod var mıdır?
  • 16-05-2013, 07:10:35
    #2
    Trigger kullanmanız gerekir.

    Trigger'lar bir tabloya kayıt eklenme hemen öncesi veya hemen sonrasında otomatik olarak çalışan kod parcacıklarıdır. Tabi kayıt eklenmeden öncemi, sonramı çalışacağını ve ne yapması gerektiğini yine kodla yazıyorsunuz..

    Öncelikle bir function olusturun bence, aşağıdaki kodu SQL bölümünde çalıştırın. Bu fonksiyon kendine verilen metindeki her kelimenin ilk harfini büyük yapar.

    CREATE FUNCTION CAP_FIRST (input VARCHAR(255))
    
    RETURNS VARCHAR(255)
    
    DETERMINISTIC
    
    BEGIN
    	DECLARE len INT;
    	DECLARE i INT;
    
    	SET len   = CHAR_LENGTH(input);
    	SET input = LOWER(input);
    	SET i = 0;
    
    	WHILE (i < len) DO
    		IF (MID(input,i,1) = ' ' OR i = 0) THEN
    			IF (i < len) THEN
    				SET input = CONCAT(
    					LEFT(input,i),
    					UPPER(MID(input,i + 1,1)),
    					RIGHT(input,len - i - 1)
    				);
    			END IF;
    		END IF;
    		SET i = i + 1;
    	END WHILE;
    
    	RETURN input;
    END;
    Şimdide yukardaki fonksiyonu klullanan Triggerımızı yazalım

    CREATE TRIGGER TRG_IlkHarfBuyut BEFORE INSERT ON Tablo_adı
    FOR EACH ROW BEGIN
      SET NEW.full_name= 	CAP_FIRST(NEW.full_name);
    END
    Bu yukadardaki tabloadı kısmına kendi tablonu yaz ama user yazınca hata verebilir ne de olsa user özel bir ifade, hata verirse user adını MYSQL de nasıl bilmiyorum ama MSSQL de [user] olarak yazmak gerekiyor, belki MySQL' de de aynıdır.

    Hepsi bu, Yukarıdaki iki kodu çalıştırdıktan sonra artık o tabloya ne kayıt eklerseniz ekleyin full_name içeriği otomatik olarak istediğiniz şekilde değiştirilecektir.