Dibandingkan dengan mengatakan:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Cade Roux
sumber
sumber
Jawaban:
Ini hanyalah penggunaan SQL yang tidak efisien, tidak peduli bagaimana Anda melakukannya.
mungkin sesuatu seperti
di mana X adalah karakter padding Anda dan @n adalah jumlah karakter dalam string yang dihasilkan (dengan asumsi Anda membutuhkan padding karena Anda berurusan dengan panjang tetap).
Tetapi seperti yang saya katakan Anda harus benar-benar menghindari melakukan ini di database Anda.
sumber
RTRIM(@str)
apakah itu bisa mengandung spasi tambahan.Saya tahu ini awalnya diminta kembali pada tahun 2008, tetapi ada beberapa fungsi baru yang diperkenalkan dengan SQL Server 2012. Fungsi FORMAT menyederhanakan bantalan kiri dengan nol dengan baik. Itu juga akan melakukan konversi untuk Anda:
Memperbarui:
Saya ingin menguji sendiri efisiensi fungsi FORMAT. Saya cukup terkejut menemukan efisiensi tidak terlalu baik dibandingkan dengan jawaban asli dari AlexCuse . Meskipun saya menemukan fungsi FORMAT lebih bersih, tidak terlalu efisien dalam hal waktu eksekusi. Tabel Tally yang saya gunakan memiliki 64.000 catatan. Kudos to Martin Smith untuk menunjukkan efisiensi waktu eksekusi.
Waktu Eksekusi SQL Server: Waktu CPU = 2157 ms, waktu yang berlalu = 2696 ms.
Waktu Eksekusi SQL Server:
sumber
Beberapa orang memberikan versi ini:
hati-hati dengan itu karena akan memotong data aktual Anda jika lebih panjang dari n.
sumber
sumber
Mungkin over-kill, saya punya UDF ini di sebelah kiri dan kanan
dan ke kanan
sumber
Saya tidak yakin metode yang Anda berikan benar-benar tidak efisien, tetapi cara alternatif, asalkan tidak harus fleksibel dalam panjang atau karakter padding, akan menjadi (dengan asumsi bahwa Anda ingin menambahkannya dengan " 0 "hingga 10 karakter:
sumber
mungkin berlebihan, saya sering menggunakan UDF ini:
Sehingga Anda dapat melakukan hal-hal seperti:
sumber
Saya suka solusi vnRocks, ini dia dalam bentuk udf
sumber
ini adalah cara sederhana untuk menulis kiri:
Di mana
x
nomor pad dany
karakter pad.Sampel:
sumber
1
menjadi001
.sumber
Di SQL Server 2005 dan yang lebih baru Anda bisa membuat fungsi CLR untuk melakukan ini.
sumber
Bagaimana dengan ini:
3 adalah jumlah
zeros
padsumber
Saya harap ini membantu seseorang.
sumber
Saya menggunakan yang ini. Ini memungkinkan Anda untuk menentukan panjang yang Anda inginkan hasilnya serta karakter padding default jika tidak disediakan. Tentu saja Anda dapat menyesuaikan panjang input dan output untuk berapa pun maksimum yang Anda temui.
Jarak tempuh Anda mungkin beragam. :-)
Joey Morgan
Programmer / Analis Kepala I
Unit Bisnis Medicaid I WellPoint
sumber
Inilah solusi saya, yang menghindari string terpotong dan menggunakan SQL sederhana. Berkat @AlexCuse , @ Kevin dan @Sklivvz , yang solusi adalah dasar dari kode ini.
sumber
Saya tahu ini tidak menambah banyak percakapan pada saat ini, tetapi saya sedang menjalankan prosedur pembuatan file dan itu akan sangat lambat. Saya telah menggunakan replikat dan melihat metode trim ini dan berpikir saya akan mencobanya.
Anda dapat melihat dalam kode saya di mana pergantian di antara keduanya merupakan tambahan pada variabel @padding baru (dan batasan yang sekarang ada). Saya menjalankan prosedur saya dengan fungsi di kedua negara dengan hasil yang sama dalam waktu eksekusi. Jadi setidaknya di SQLServer2016, saya tidak melihat perbedaan dalam efisiensi yang ditemukan orang lain.
Ngomong-ngomong, ini UDF saya yang saya tulis bertahun-tahun yang lalu ditambah perubahan hari ini yang sama seperti yang lain selain memiliki opsi param KIRI / KANAN dan beberapa pengecekan kesalahan.
sumber
Saya punya satu fungsi yang lpad dengan x desimal: CREATE FUNCTION [dbo]. [LPAD_DEC] (- Tambahkan parameter untuk fungsi di sini @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) RETURNS nvarchar (maks) AS BEGIN - Deklarasikan variabel return di sini DECLARE @resp nvarchar (maks)
AKHIR
sumber
Untuk memberikan nilai numerik dibulatkan ke dua tempat desimal tetapi diisi dengan nol jika diperlukan, saya harus:
Jika ada yang bisa memikirkan cara yang lebih rapi, itu akan dihargai - hal di atas nampak canggung .
Catatan : dalam contoh ini, saya menggunakan SQL Server untuk mengirim email laporan dalam format HTML dan ingin memformat informasi tanpa melibatkan alat tambahan untuk mengurai data.
sumber
Ini adalah bagaimana saya biasanya membuat varchar
sumber