Saya perlu mengubah int datafield ke nvarchar dengan angka nol di depan
contoh:
1 ubah menjadi '001'
867 ubah menjadi '000867', dll.
Terima kasih.
Ini tanggapan saya 4 Jam kemudian ...
Saya menguji T-SQL Script ini dan bekerja dengan baik untuk saya!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
Saya membuat fungsi pengguna ini
Kode T-SQL:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Contoh:
PILIH dbo.CIntToChar (867, 6) sebagai COD_ID
KELUARAN
000867
sql-server
stored-procedures
RicardoBalda
sumber
sumber
Jawaban:
Coba ini:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Akan didapat hasil dalam 5 digit, misal: 00001, ...., 01234
sumber
select right('00000' || cast(Your_Field as varchar(5)), 5)
Anda juga dapat menggunakan fungsi FORMAT () yang diperkenalkan di SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
sumber
Gunakan
REPLICATE
agar Anda tidak perlu membuat kode keras semua nol di depan:KELUARAN:
sumber
Bukan untuk High-Jack pertanyaan ini tetapi catatan perlu dibuat bahwa Anda perlu menggunakan (N) VARCHAR daripada (N) CHAR tipe data.
Segmen di atas, tidak akan menghasilkan respons yang benar dari SQL 2005
Segmen di atas, akan menghasilkan respon yang diinginkan dari SQL 2005
Varchar akan memberi Anda panjang awalan yang diinginkan dengan cepat. Sedangkan untuk tipe data fixed length akan membutuhkan penunjukan dan penyesuaian panjang.
sumber
Saya suka menggunakan
ini memberi saya
sumber
RIGHT(1000+Number, 3)
- bagus, pendek dan cepatTipe data "int" tidak boleh lebih dari 10 digit, selain itu fungsi "Len ()" bekerja pada int, jadi tidak perlu mengonversi int menjadi string sebelum memanggil fungsi len ().
Terakhir, Anda tidak memperhitungkan kasus di mana ukuran int Anda> jumlah total digit yang Anda inginkan untuk diisi (@intLen).
Oleh karena itu, solusi yang lebih ringkas / tepat adalah:
sumber
Tidak terlalu elegan, tetapi saya menambahkan nilai yang ditetapkan dengan angka nol di depan yang sama yang saya inginkan ke angka yang ingin saya ubah, dan menggunakan fungsi KANAN.
Contoh:
sumber
Solusi satu baris ( per se ) untuk SQL Server 2008 atau lebih tinggi:
Perkalian dengan
SIGN
ekspresi setara denganMAX(0, @DesiredLenght-LEN([Column]))
. Masalahnya adalah ituMAX()
hanya menerima satu argumen ...sumber
Saya menemukan artikel bagus di sini :
sumber
BTW jika itu adalah kolom int maka masih tidak akan menyimpan nol Lakukan saja di lapisan presentasi atau jika Anda benar-benar perlu di PILIH
sumber
Punya masalah yang sama, begini cara saya menyelesaikannya ... Sederhana dan elegan. The "4" adalah berapa panjang string itu, tidak peduli berapa panjang integer yang dilewatkan itu akan pad dengan nol sampai "4".
sumber
Dalam kasus saya, saya ingin bidang saya memiliki memimpin 0 dalam bidang 10 karakter (NVARCHAR (10)). File sumber tidak memiliki awalan 0 yang diperlukan untuk digabungkan ke dalam tabel lain. Apakah ini hanya karena berada di SQL Server 2008R2:
Setel Bidang = kanan (('0000000000' + [Bidang]), 10) (Tidak dapat menggunakan Format () karena ini adalah pra SQL2012)
Melakukan ini terhadap data yang ada. Jadi cara ini 1 atau 987654321 masih akan mengisi semua 10 spasi dengan 0 di depan.
Saat data baru sedang diimpor & lalu dibuang ke tabel melalui database Access, saya bisa menggunakan Format ([Bidang], "0000000000") saat menambahkan dari Access ke tabel server SQL untuk catatan baru apa pun.
sumber
- Tanpa 'RTRIM', nilai yang dikembalikan adalah
3__
!!!- Tanpa 'RTRIM', nilai yang dikembalikan adalah
867___
!!!sumber
Menggunakan
RIGHT
adalah opsi yang bagus, tetapi Anda juga dapat melakukan hal berikut:di mana
N
jumlah digit yang ingin Anda tampilkan. Jadi untuk nilai 3 digit dengan awalan nol (N = 3
):atau bergantian
Apa yang dilakukan ini adalah menambahkan nilai yang diinginkan ke pangkat 10 yang cukup besar untuk menghasilkan cukup banyak angka nol di depan, lalu memotong 1 di depan.
Keuntungan dari teknik ini adalah bahwa panjang hasilnya akan selalu sama, memungkinkan penggunaan
SUBSTRING
alih-alihRIGHT
, yang tidak tersedia dalam beberapa bahasa kueri (seperti HQL).sumber
Ini berfungsi untuk saya di MYSQL:
Sebagai contoh:
Semoga ini bisa membantu. salam Hormat
sumber
Bekerja di SQLServer
Nikmati
sumber
Saya bertanya-tanya, apakah ini ada gunanya bagi Anda?
sumber