Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy istnieje wbudowana funkcja, która może konwertować liczby na słowa w serwerze sql?

Istnieje funkcja Util_ToWords , w bezpłatnej wersji SQL# Biblioteka SQLCLR, którą napisałem, która to robi (cóż, bez dodawania słów "dolary" i "centy":

SELECT SQL#.Util_ToWords(10); -- Ten
SELECT SQL#.Util_ToWords(100); -- One Hundred
SELECT SQL#.Util_ToWords(1000); -- One Thousand 
SELECT SQL#.Util_ToWords(120.20); -- One Hundred Twenty and 20
SELECT SQL#.Util_ToWords(212); -- Two Hundred Twelve
SELECT SQL#.Util_ToWords(123097.4);-- One Hundred Twenty Three Thousand, Ninety Seven and 40

Poniższy przykład wstrzykuje słowa "dolary" i "centy" do wartości zwracanej (która pierwotnie była przeznaczona do drukowania na czekach):

DECLARE @Amount MONEY = 2.08;

;WITH cte AS
(
  SELECT N' dollar' + CASE WHEN @Amount >= 1.00 AND @Amount < 2.00 THEN N''
              ELSE N's'
         END AS [Currency],
         SQL#.Util_ToWords(@Amount) AS [Words]
)
SELECT CASE CHARINDEX(N' and ', cte.[Words])
           WHEN 0 THEN cte.[Words] + cte.[Currency]
           ELSE STUFF(cte.[Words], CHARINDEX(N' and ', cte.[Words]), 0, cte.[Currency])
                + N' cents'
       END
FROM cte;

Zwroty:

Two dollars and 08 cents


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdzanie kopii zapasowej serwera SQL

  2. Przekonwertować na html za pomocą xquery?

  3. Przesyłanie strumieniowe bezpośrednio do bazy danych

  4. Dlaczego kolumna TEXT zwraca tylko 4096 bajtów?

  5. Jak ROW_NUMBER() działa w SQL Server