Bin ayırıcı olarak boşluk içeren sayıyı biçimlendirme

Birincisi: Evet, veri katmanında sayı biçimlendirmesinin yapılmayacağını biliyorum, ancak uygulamada ayarlanan sonucu düzenleyemiyorum veya değiştiremiyorum. Sadece bir sorgu yazabilirim.

Bir SQL Server 2008 sorgusu için, alanı bin ayırıcı olarak ve ayrıca iki ondalık basamağa kadar kullanmak istiyorum. Örnek: 123363.249999 , 123 363,25 olarak gösterilmelidir.

Denedim:

SELECT REPLACE(CONVERT(varchar, CONVERT(money, 123363.249999), 1), '.00', '')

Ancak bu 123,363.25 ile sonuçlanır. Virgül yerine boşluk ve nokta virgül koymaktan daha güzel bir çözüm arıyorum. Yerel ayar sorguda ayarlamak iyi olurdu.

1
Açıkça ben uygulamayı değiştiremiyorum sorusunda açıkça açıkladım :) Ben sadece bir SQL sorgusu ile besleyebilirim.
katma yazar Kristoffer Jälén, kaynak
Açıkça ben uygulamayı değiştiremiyorum sorusunda açıkça açıkladım :) Ben sadece bir SQL sorgusu ile besleyebilirim.
katma yazar Kristoffer Jälén, kaynak
Özür dilerim - İlk satırın üstesinden gelmeliydim :) yorum kaldırıldı.
katma yazar D Stanley, kaynak
Özür dilerim - İlk satırın üstesinden gelmeliydim :) yorum kaldırıldı.
katma yazar D Stanley, kaynak

8 cevap

SQL Server 2008 için, SQL Server içindeki "daha iyi" bir çözüm için en iyi bahsinizin özel bir CLR işlevi , bölge/yerel ayarlara dayalı biçimlendirmeyi işlemek için.

SQL Server 2012 veya sonraki sürümleri için FORMAT işlevi tanıtıldı.

2
katma
Tamam, ama MySQL FORMAT işlevi gibi bir şey daha iyi olurdu. Fakat anladığım kadarıyla SQL Server 2008'de böyle bir şey yok.
katma yazar Kristoffer Jälén, kaynak

SQL Server 2008 için, SQL Server içindeki "daha iyi" bir çözüm için en iyi bahsinizin özel bir CLR işlevi , bölge/yerel ayarlara dayalı biçimlendirmeyi işlemek için.

SQL Server 2012 veya sonraki sürümleri için FORMAT işlevi tanıtıldı.

2
katma
Tamam, ama MySQL FORMAT işlevi gibi bir şey daha iyi olurdu. Fakat anladığım kadarıyla SQL Server 2008'de böyle bir şey yok.
katma yazar Kristoffer Jälén, kaynak

Bu aynı zamanda bunu yapmanın başka bir yoludur, fakat aslında işleri yapmanın “temizleyici” bir yolu değildir.

SELECT REPLACE(REPLACE(CONVERT(varchar,CAST(123363.249999 AS money),1),',',' '),'.',',')

Çıktı:

123 363,25
0
katma

Bu aynı zamanda bunu yapmanın başka bir yoludur, fakat aslında işleri yapmanın “temizleyici” bir yolu değildir.

SELECT REPLACE(REPLACE(CONVERT(varchar,CAST(123363.249999 AS money),1),',',' '),'.',',')

Çıktı:

123 363,25
0
katma

Bunun sizin için çalışması gerektiğini düşünüyorum:

SELECT REPLACE(REPLACE(CONVERT(varchar, CONVERT(money, 12765763363.249999), 1), ',', ' '), '.', ',');

Aşağıdakileri çıkartacaktır:

12 765 763 363,25
0
katma
Evet, ancak OP özellikle “Sadece virgülle boşluk ve nokta ile virgül değiştirmek yerine daha iyi bir çözüm arıyorum” dedi.
katma yazar Joe Stefanelli, kaynak
Soruyu yanlış anladım. Okurken "sadece" yerine "o" yazdım ...: /
katma yazar Marin Takanov, kaynak

Bunun sizin için çalışması gerektiğini düşünüyorum:

SELECT REPLACE(REPLACE(CONVERT(varchar, CONVERT(money, 12765763363.249999), 1), ',', ' '), '.', ',');

Aşağıdakileri çıkartacaktır:

12 765 763 363,25
0
katma
Evet, ancak OP özellikle “Sadece virgülle boşluk ve nokta ile virgül değiştirmek yerine daha iyi bir çözüm arıyorum” dedi.
katma yazar Joe Stefanelli, kaynak
Soruyu yanlış anladım. Okurken "sadece" yerine "o" yazdım ...: /
katma yazar Marin Takanov, kaynak

Bunu yapmanın en iyi yolu budur. Kopyalayıp excel'e yapıştırdıktan sonra mükemmel bir çekicilik gibi çalışır

REPLACE(REPLACE(CONVERT(VARCHAR,CAST(@yourbig number  AS money) ,1)  ,',',' '), '.', ',')  AS 'SQL gap for thousands finally revealed'

CONVERT (VARCHAR) olacaktır belki de orada olmalı, aksi halde boşlukla virgül değiştiremezsiniz .... Hala daha güzel ve daha kısa hale getirmeye çalışıyorum ama başka bir şey bulamadım .... bazı ipucu bu ancak çalışmıyor

0
katma

Bunu yapmanın en iyi yolu budur. Kopyalayıp excel'e yapıştırdıktan sonra mükemmel bir çekicilik gibi çalışır

REPLACE(REPLACE(CONVERT(VARCHAR,CAST(@yourbig number  AS money) ,1)  ,',',' '), '.', ',')  AS 'SQL gap for thousands finally revealed'

CONVERT (VARCHAR) olacaktır belki de orada olmalı, aksi halde boşlukla virgül değiştiremezsiniz .... Hala daha güzel ve daha kısa hale getirmeye çalışıyorum ama başka bir şey bulamadım .... bazı ipucu bu ancak çalışmıyor

0
katma