İçeriğe geç

Rakamları yazıya çeviren MSSQL kullanıcı tanımlı fonksiyon

5.843 defa okundu

Konu: SQL Fonksiyonları

Bazı durumlarda MS SQL de rakamları yazıya çevirmek gerekebilir. SQL içinde rakamları sayıya çeviren hazır bir fonksiyon bulunmamaktadır. Bu ihtiyacı karşılamak ve her ihtiyaç duyulduğunda kullanmak için kullanıcı tanımlı bir fonksiyon yazmak gerekir. Aşağıda sayı türünde değişken alıp metin olarak aldığı sayısal değeri yazıya çeviren user fonksiyon yazılımı verilmiştir. Ayrıca bu fonksiyonun nasıl kullanılacağı anlatılmıştır.

SQL
  1. CREATE FUNCTION [dbo].[FN_RAKAMYAZ] (@Sayi bigint)
  2. RETURNS nvarchar(300)
  3. AS
  4. BEGIN
  5. DECLARE @n int,@i int,@UcHane int,@Yed nvarchar(300),@UcluHane nvarchar(300),
  6. @HangiBasamak int,@Negatif bit,@BasamakYaz bit,@SONUC nvarchar(300)
  7. SET @n=9
  8. SET @SONUC=NULL
  9. BEGIN
  10. SET @SONUC=''
  11. IF (@Sayi=0) SET @SONUC='Sıfır' ELSE
  12. BEGIN
  13. IF (@Sayi<0) BEGIN
  14. SET @Negatif=1
  15. SET @Sayi=-@Sayi
  16. END ELSE SET @Negatif=0
  17. SET @HangiBasamak=0;
  18. WHILE (@Sayi>0)
  19. BEGIN
  20. SET @UcHane=@Sayi % 1000
  21. SET @Sayi=@Sayi / 1000
  22. IF (@UcHane>0) SET @BasamakYaz=1 ELSE SET @BasamakYaz=0
  23. IF ((@HangiBasamak=1) and (@UcHane=1)) SET @UcluHane=''
  24. ELSE BEGIN
  25. SET @UcluHane=''
  26. SET @i=@UcHane%10 SET @UcHane=@UcHane/10
  27. SET @UcluHane=CASE @i
  28. WHEN 1 THEN 'Bir'
  29. WHEN 2 THEN 'İki'
  30. WHEN 3 THEN 'Üç'
  31. WHEN 4 THEN 'Dört'
  32. WHEN 5 THEN 'Beş'
  33. WHEN 6 THEN 'Altı'
  34. WHEN 7 THEN 'Yedi'
  35. WHEN 8 THEN 'Sekiz'
  36. WHEN 9 THEN 'Dokuz'
  37. ELSE '' END
  38. SET @i=@UcHane%10 SET @UcHane=@UcHane/10
  39. SET @UcluHane=CASE @i
  40. WHEN 1 THEN 'On'
  41. WHEN 2 THEN 'Yirmi'
  42. WHEN 3 THEN 'Otuz'
  43. WHEN 4 THEN 'Kırk'
  44. WHEN 5 THEN 'Elli'
  45. WHEN 6 THEN 'Altmış'
  46. WHEN 7 THEN 'Yetmiş'
  47. WHEN 8 THEN 'Seksen'
  48. WHEN 9 THEN 'Doksan'
  49. ELSE '' END+@UcluHane
  50. SET @i=@UcHane%10
  51. IF (@i>0) SET @Yed='Yüz' ELSE SET @Yed=''
  52. IF (@i>1) SET @Yed=CASE @i
  53. WHEN 1 THEN 'Bir'
  54. WHEN 2 THEN 'İki'
  55. WHEN 3 THEN 'Üç'
  56. WHEN 4 THEN 'Dört'
  57. WHEN 5 THEN 'Beş'
  58. WHEN 6 THEN 'Altı'
  59. WHEN 7 THEN 'Yedi'
  60. WHEN 8 THEN 'Sekiz'
  61. WHEN 9 THEN 'Dokuz'
  62. ELSE '' END+@Yed
  63. SET @UcluHane=@Yed+@UcluHane;
  64. END
  65. IF (@BasamakYaz=1) SET @SONUC=@UcluHane+CASE @HangiBasamak
  66. WHEN 1 THEN 'Bin'
  67. WHEN 2 THEN 'Milyon'
  68. WHEN 3 THEN 'Milyar'
  69. WHEN 4 THEN 'Trilyon'
  70. WHEN 5 THEN 'Katrilyon'
  71. WHEN 6 THEN 'Kentrilyon'
  72. WHEN 7 THEN 'Sekstilyon'
  73. WHEN 8 THEN 'Septilyon'
  74. WHEN 9 THEN 'Oktilyon'
  75. ELSE '' END+@SONUC
  76. SET @HangiBasamak=@HangiBasamak+1
  77. END
  78. IF (@Negatif=1) SET @SONUC='Eksi'+@SONUC
  79. END
  80. END
  81. RETURN @SONUC
  82. END

Fonksiyon oluşturulduktan sonra aşağıdaki gibi kullanılır.

SQL
  1. SELECT dbo.FN_RAKAMYAZ (158490) AS YAZIYLA

Sonuç

YüzElliSekizBinDörtYüzDoksan

Veya aşağıdaki gibi kullanılır

SQL
  1. SELECT URUNADI,TUTAR,dbo.FN_RAKAMYAZ (TUTAR) AS YAZIYLAFROM URUNLER

Bu yazı işinize yaradı mı?

SQL Fonksiyonları konusundaki diğer yazılar

SQL Fonksiyonları: 13 yazının tümü →

WhatsApp'ta paylaş

İlgili Yazılar