Korzystam z niektórych zapytań administracyjnych i kompiluję wyniki z sp_spaceused
SQL Server 2008, aby sprawdzić proporcje przestrzeni danych / indeksu niektórych tabel w mojej bazie danych. Oczywiście w wynikach pojawiają się różnego rodzaju duże liczby, a moje oczy zaczynają się połyskiwać. Byłoby naprawdę wygodne, gdybym mógł sformatować wszystkie te liczby przecinkami (987654321 staje się 987,654,321). Zabawne, że przez wszystkie lata korzystania z programu SQL Server ten problem nigdy nie pojawiał się, ponieważ przez większość czasu zajmowałem się formatowaniem w warstwie prezentacji, ale w tym przypadku wynikiem T-SQL w SSMS jest prezentacja.
Zastanawiałem się nad stworzeniem prostego CLR UDF, aby to rozwiązać, ale wydaje się, że powinno to być możliwe w zwykłym starym T-SQL. Zadam więc pytanie - jak przeprowadzacie formatowanie numeryczne w waniliowym T-SQL?
źródło
Odpowiedzi:
W SQL Server 2012 i nowszych wersjach formatuje liczbę przecinkami:
Możesz także zmienić
0
liczbę miejsc dziesiętnych, które chcesz.źródło
format
funkcji.culture
.Chociaż zgadzam się ze wszystkimi, w tym z OP, który mówi, że formatowanie powinno odbywać się w warstwie prezentacji, formatowanie to można wykonać w języku T-SQL poprzez rzutowanie na,
money
a następnie konwersję navarchar
. Obejmuje to jednak dziesiętne, które można zapętlićSUBSTRING
.źródło
Polecam Zastąp zamiast podciągów, aby uniknąć problemów z długością łańcucha:
źródło
W przypadku implementacji programu SQL Server 2012+ będziesz mieć możliwość użycia FORMATU do zastosowania formatowania ciągów do typów danych nieciągłych.
W pierwotnym pytaniu użytkownik poprosił o możliwość używania przecinków jako tysięcy separatorów. W zamkniętym zduplikowanym pytaniu użytkownik zapytał, jak zastosować formatowanie walut. Poniższe zapytanie pokazuje, jak wykonać oba zadania. Pokazuje także zastosowanie kultury, aby uczynić to bardziej ogólnym rozwiązaniem (odnosząc się do funkcji Tsiridis Dimitris do zastosowania specjalnego greckiego formatowania)
SQLFiddle dla powyższych
źródło
String index out of range: 33
Demo 1
Pokazuje dodanie przecinków:
Demo 2
Pokazuje przecinki i przecinki dziesiętne. Zauważ, że w razie potrzeby zaokrągla ostatnią cyfrę.
Zgodność
SQL Server 2012+
.źródło
Spróbuj z poniższym zapytaniem:
Formatuj z prawym przecinkiem dziesiętnym:
źródło
FORMAT
funkcję, jestSELECT format(123456789987654321,'###,##0')
, lub prościej,select format(123456789987654321, 'N0')
jak odpowiedział @ThomasMueller.wyjście = 9 876 543
i możesz zastąpić 9876543 nazwą kolumny.
źródło
Wypróbowałem powyższą sztuczkę pieniężną, a to świetnie sprawdza się w przypadku wartości liczbowych zawierających dwie lub mniej znaczące cyfry. Stworzyłem własną funkcję do formatowania liczb dziesiętnych:
źródło
To należy do komentarza do odpowiedzi Phila Hunta , ale niestety nie mam przedstawiciela.
Aby usunąć „.00” z końca łańcucha liczb, nazwa parsen jest bardzo przydatna. Tokenizuje łańcuchy rozdzielane kropką i zwraca określony element, zaczynając od tokena znajdującego się najbardziej na prawo jako element 1.
Daje „987,654,321”
źródło
oto kolejny UDF t-sql
źródło
źródło
Oto używana przeze mnie funkcja skalarna, która naprawia niektóre błędy w poprzednim przykładzie (powyżej), a także obsługuje wartości dziesiętne (do określonej liczby cyfr) (EDYCJA działa również z 0 i liczbami ujemnymi). Inna uwaga, powyższa metoda przesyłania jako pieniądza jest ograniczona do rozmiaru typu danych PIENIĄDZE i nie działa z dziesiętnymi 4 (lub więcej) cyframi. Ta metoda jest zdecydowanie prostsza, ale mniej elastyczna.
źródło
Kolejny UDF, który, mam nadzieję, jest dość ogólny i nie przyjmuje założeń, czy chcesz zaokrąglić do określonej liczby miejsc po przecinku:
źródło
- ================================================ =================== -
/ * Ta funkcja wymaga 3 argumentów: pierwszy argument to @Numero_str, który Liczba jako dane wejściowe, a pozostałe 2 argumenty określają sposób formatowania informacji na wyjściu, argumenty te to @Pos_Enteros i @Pos_Decimales, które określają liczbę Miejsca całkowite i dziesiętne, które chcesz pokazać dla liczby, którą podajesz jako argument wejściowy. * /
źródło
W przypadku programu SQL Server przed 2012 r., Który nie zawiera funkcji FORMAT, utwórz tę funkcję:
wybierz dbo.FormatCurrency (12345678) zwraca 12 346 678,00 $
Upuść $, jeśli chcesz przecinki.
źródło