Saya memiliki tabel A berikut:
id
----
1
2
12
123
1234
Saya perlu mengesampingkan id
nilai dengan nol:
id
----
0001
0002
0012
0123
1234
Bagaimana saya bisa mencapai ini?
Saya percaya ini mungkin yang Anda cari:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
atau
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Saya belum menguji sintaks pada contoh ke-2. Saya tidak yakin apakah itu berhasil 100% - ini mungkin memerlukan beberapa penyesuaian - tetapi ini menyampaikan gagasan umum tentang cara mendapatkan keluaran yang Anda inginkan.
EDIT
Untuk mengatasi masalah yang tercantum di komentar ...
@ pkr298 - Ya STR hanya bekerja pada angka ... Bidang OP adalah ID ... maka angka saja.
@ Desolator - Tentu saja itu tidak akan berhasil ... Parameter pertama adalah 6 karakter. Anda dapat melakukan sesuatu seperti:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
ini secara teoritis harus memindahkan tiang gawang ... karena jumlahnya semakin besar, itu harus SELALU berfungsi .... terlepas dari apakah itu 1 atau 123456789 ...
Jadi jika nilai maksimal Anda adalah 123456 ... Anda akan melihat 0000123456 dan jika nilai minimum Anda adalah 1, Anda akan melihat 0000000001
STR(123456, 4)
akan mengembalikan****
SQL Server sekarang mendukung fungsi FORMAT mulai dari versi 2012, jadi:
akan melakukan triknya.
Jika id atau kolom Anda ada di a
varchar
dan mewakili angka yang Anda konversi dulu:sumber
Hasil
sumber
Pos lama, tapi mungkin ini membantu seseorang:
Untuk menyelesaikan hingga berakhir dengan 4 karakter tidak kosong:
Untuk menyelesaikan hingga 10:
Jika kolomnya numerik , ubah dulu menjadi varchar dengan kode seperti ini:
Dan untuk melengkapi sampai 10 dengan bidang numerik:
sumber
Coba ini:
sumber
- Tolong periksa ini.
- Saya harap ini akan membantu Anda
sumber
Ini berfungsi untuk string, integer, dan numerik:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Dimana
4
panjang yang diinginkan. Berfungsi untuk angka dengan lebih dari 4 digit, mengembalikanNULL
nilai string kosong .sumber
Jika ada yang masih tertarik, saya menemukan artikel ini di DATABASE.GUIDE:
Left Padding in SQL Server - 3 LPAD () Equivalents
Singkatnya, ada 3 metode yang disebutkan dalam artikel itu.
Misalkan id Anda = 12 dan Anda membutuhkannya untuk ditampilkan sebagai 0012.
Metode 1 - Gunakan Fungsi RIGHT ()
Metode pertama menggunakan fungsi RIGHT () untuk mengembalikan hanya bagian paling kanan dari string, setelah menambahkan beberapa nol di depan.
SELECT RIGHT('00' + '12', 4);
Hasil:
0012
Metode 2 - Gunakan Kombinasi RIGHT () dan REPLICATE ()
Metode ini hampir sama dengan metode sebelumnya, dengan satu-satunya perbedaan adalah saya cukup mengganti tiga nol dengan fungsi REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Hasil:
0012
Metode 3 - Gunakan Kombinasi REPLACE () dan STR ()
Metode ini berasal dari sudut yang sama sekali berbeda dengan metode sebelumnya:
SELECT REPLACE(STR('12', 4),' ','0');
Hasil:
0012
Simak artikelnya, ada analisis lebih mendalam dengan contoh.
sumber
Inilah yang biasanya saya gunakan saat saya perlu memberi nilai.
sumber
Saya membutuhkan ini dalam sebuah fungsi di SQL server dan menyesuaikan jawaban Patrick sedikit.
sumber
Buat Fungsi:
Contoh:
sumber
SELECT @var = LTRIM(RTRIM(@Text))
Saya membuat sebuah fungsi:
Gunakan: pilih dbo.fnPadLeft (123, 10)
Pengembalian: 0000000123
sumber
Sesuatu yang sesuai dengan ODBC jika diperlukan adalah sebagai berikut:
Ini mendasarkan pada fakta bahwa jumlah digit untuk bilangan basis 10 dapat ditemukan oleh komponen integral dari lognya. Dari sini kita dapat menguranginya dari lebar bantalan yang diinginkan. Ulangi akan mengembalikan
null
nilai di bawah 1 jadi kita perluifnull
.sumber
Solusi saya tidak efisien tetapi membantu saya dalam situasi di mana nilai (nomor cek bank dan no ref transfer kawat) disimpan sebagai varchar di mana beberapa entri memiliki nilai alfa numerik dengan mereka dan saya harus pad jika panjangnya lebih kecil dari 6 karakter.
Berpikir untuk berbagi jika seseorang menemukan situasi yang sama
sumber
Contoh sederhananya adalah
sumber
Saya membuat fungsi untuk melakukan ini, di mana Anda dapat menentukan panjang karakter keluaran yang diinginkan:
Hasil contoh
sumber
Cara yang lebih efisien adalah:
sumber