Saya memiliki string yang panjangnya hingga 3 karakter saat pertama kali dibuat di SQL Server 2008 R2.
Saya ingin menambahkannya dengan angka nol di depan, jadi jika nilai aslinya adalah '1' maka nilai baru adalah '001'. Atau jika nilai aslinya adalah '23' nilai baru adalah '023'. Atau jika nilai aslinya adalah '124' maka nilai baru sama dengan nilai asli.
Saya menggunakan SQL Server 2008 R2. Bagaimana saya melakukan ini menggunakan T-SQL?
sql-server
tsql
Sunil
sumber
sumber
Jawaban:
Jika bidang sudah menjadi string, ini akan berfungsi
Jika Anda ingin nulls ditampilkan sebagai '000'
Mungkin bilangan bulat - maka Anda ingin
sumber
Meskipun pertanyaannya adalah untuk SQL Server 2008 R2, jika seseorang membaca ini dengan versi 2012 dan di atasnya, sejak itu menjadi lebih mudah dengan menggunakan FORMAT .
Anda dapat meneruskan string format numerik standar atau string format numerik khusus sebagai argumen format (terima kasih kepada Vadim Ovchinnikov untuk petunjuk ini).
Untuk pertanyaan ini misalnya kode suka
output
sumber
Metode aman:
Ini memiliki keuntungan mengembalikan string
'***'
untuk n <0 atau n> 999, yang merupakan indikator input out-of-bounds yang bagus dan jelas. Metode lain yang tercantum di sini akan gagal secara diam-diam dengan memotong input ke substring 3 karakter.sumber
SELECT REPLACE(STR('1',3),' ','0')
Breaks:SELECT REPLACE(STR('1A',3),' ','0')
. Ini baru saja membakar saya hari ini ketika seorang pengguna memasukkan surat ke dalam string masukan dan saya gagal menguji kasus itu.Berikut adalah teknik yang lebih umum untuk bantalan kiri dengan lebar yang diinginkan:
Namun, jika Anda berurusan dengan nilai-nilai negatif, dan menggunakan angka nol di depan, teknik ini atau teknik yang disarankan lainnya tidak akan berfungsi. Anda akan mendapatkan sesuatu yang terlihat seperti ini:
[Mungkin bukan yang Anda inginkan]
Jadi ... Anda harus melompati beberapa simpai tambahan Berikut ini satu pendekatan yang akan memformat angka negatif dengan benar:
Orang harus mencatat bahwa
convert()
panggilan harus menentukan[n]varchar
panjang yang cukup untuk menahan hasil yang dikonversi dengan pemotongan.sumber
Berikut adalah varian jawaban Hogan yang saya gunakan di SQL Server Express 2012:
Alih-alih khawatir jika bidangnya berupa string atau tidak, saya hanya
CONCAT
melakukannya, karena bagaimanapun juga akan menghasilkan string. Selain itu jika bidangnya bisa aNULL
, menggunakanISNULL
mungkin diperlukan untuk menghindari fungsi mendapatkanNULL
hasil.sumber
Saya selalu menemukan metode berikut ini sangat membantu.
sumber
Gunakan fungsi ini yang sesuai dengan setiap situasi.
Output sampel
sumber
DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 12 - LEN(@NumStr)) + @NumStr;
yang mengembalikan contoh pertama Salar di atas. Terima kasih, Salar.DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 10 - LEN(@NumStr)) + @NumStr;
yang kembali0000002016
pada contoh pertama di atas.Bagi mereka yang ingin memperbarui data yang ada di sini adalah pertanyaan:
sumber
Untuk bilangan bulat, Anda dapat menggunakan konversi implisit dari int ke varchar:
sumber
Saya tahu tiket lamanya yang saya pikir akan saya bagikan.
Saya menemukan kode ini mencari solusi. Tidak yakin apakah itu berfungsi pada semua versi MSSQL Saya memiliki MSSQL 2016.
mengembalikan "0023" The 4 dalam fungsi STR adalah panjang total termasuk nilai. Contoh 4, 23 dan 123 semuanya akan memiliki 4 dalam STR dan jumlah nol yang benar akan ditambahkan. Anda dapat menambah atau mengurangi itu. Tidak perlu mendapatkan panjang pada tanggal 23.
Sunting: Saya melihat sama dengan posting @Anon.
sumber
Coba ini dengan panjang tetap.
sumber
Saya memiliki masalah yang sama dengan kolom integer sebagai input ketika saya membutuhkan varchar (atau string) berukuran tetap. Misalnya, 1 hingga '01', 12 hingga '12'. Kode ini berfungsi:
Jika input juga merupakan kolom varchar, Anda dapat menghindari bagian casting.
sumber
Untuk pendekatan yang lebih dinamis coba ini.
sumber
Menulis ini karena saya memiliki persyaratan hingga panjang tertentu (9). Pads kiri dengan @pattern SAJA ketika input perlu padding. Harus selalu mengembalikan panjang yang ditentukan dalam @pattern.
Mengembalikan 1234input
sumber
Sederhana itu
Suka:
sumber
Saya datang ke sini secara khusus untuk mencari tahu bagaimana saya bisa mengubah zona waktu saya menjadi string zona waktu untuk mengubah tanggal menjadi DATETIMEOFFSET di SQL Server 2008. Gross, tetapi perlu.
Jadi saya memerlukan 1 metode yang akan mengatasi angka negatif dan positif, memformatnya menjadi dua karakter dengan nol di depan jika diperlukan. Jawaban Anons membuat saya dekat, tetapi nilai-nilai zona waktu negatif akan keluar
0-5
daripada yang diperlukan-05
Jadi dengan sedikit perubahan pada jawabannya, ini berfungsi untuk semua konversi jam waktu
sumber
Saya membuat fungsi ini yang melayani bigint dan satu nol terkemuka atau karakter tunggal lainnya (maks 20 karakter dikembalikan) dan memungkinkan untuk panjang hasil kurang dari panjang nomor input:
sumber