Saya memiliki tabel yang diimpor sebagai semua UPPER CASE dan saya ingin mengubahnya menjadi Kasus yang Tepat. Skrip apa yang pernah kalian gunakan untuk menyelesaikan ini?
sql
sql-server
uppercase
title-case
RyanKeeter
sumber
sumber
Jawaban:
Inilah UDF yang akan melakukan trik ...
Anda masih harus menggunakannya untuk memperbarui data Anda.
sumber
Fungsi ini:
Hasil:
sumber
O'DONNELL
tidak akan berubah menjadiO'donnell
.SET @o = @o + @c
untukSET @o = @o + UPPER(@c)
. =)http://sqlmag.com/t-sql/how-title-case-column-value
sumber
title
kosong.WHERE title IS NOT NULL
ke bagian akhir untuk menyelesaikan masalah @Serg.SUBSTRING
alih-alihRIGHT
Jika Anda dapat mengaktifkan CLR di SQL Server (membutuhkan 2005 atau lebih baru) maka Anda dapat membuat fungsi CLR yang menggunakan fungsi bawaan TextInfo.ToTitleCase yang memungkinkan Anda membuat cara sadar budaya untuk melakukan ini hanya dalam beberapa baris kode.
sumber
Saya tahu ini adalah posting terlambat di utas ini tetapi, layak untuk dilihat. Fungsi ini bekerja untuk saya setiap saat. Jadi terpikir untuk membagikannya.
Tes panggilan:
Hasil:
sumber
Saya agak terlambat dalam permainan ini, tapi saya yakin ini lebih fungsional dan bekerja dengan semua bahasa, termasuk Rusia, Jerman, Thailand, Vietnam dll. Huruf besar akan menjadi huruf besar setelah 'atau - atau. atau (atau) atau spasi (jelas :).
sumber
Jika Anda berada di SSIS mengimpor data yang memiliki cased campuran dan perlu melakukan pencarian pada kolom dengan kapitalisasi yang tepat, Anda akan melihat bahwa pencarian gagal saat sumber dicampur dan sumber pencarian sesuai. Anda juga akan melihat bahwa Anda tidak dapat menggunakan fungsi kanan dan kiri SSIS untuk SQL Server 2008r2 untuk kolom turunan. Inilah solusi yang berhasil untuk saya:
sumber
Berikut adalah versi yang menggunakan tabel urutan atau angka daripada loop. Anda dapat mengubah klausa WHERE untuk menyesuaikan aturan pribadi Anda tentang kapan harus mengubah karakter menjadi huruf besar. Saya baru saja menyertakan satu set sederhana yang akan membuat huruf besar semua surat yang dilanjutkan dengan non-huruf dengan pengecualian apostrof. Ini berarti bahwa 123apel memiliki kecocokan pada "a" karena "3" bukan huruf. Jika Anda hanya menginginkan spasi (spasi, tab, carriage-return, line-feed), Anda dapat mengganti pola
'[^a-z]'
dengan'[' + Char(32) + Char(9) + Char(13) + Char(10) + ']'
.sumber
Tautan yang saya posting di atas adalah opsi bagus yang membahas masalah utama: bahwa kami tidak pernah dapat menjelaskan semua kasus secara terprogram (Smith-Jones, von Haussen, John Smith MD), setidaknya tidak dengan cara yang elegan. Tony memperkenalkan konsep karakter pengecualian / penghentian untuk menangani kasus-kasus ini. Bagaimanapun, membangun ide Cervo (huruf besar semua lebih rendah didahului oleh spasi), pernyataan ganti dapat dibungkus dalam satu tabel berbasis ganti sebagai gantinya. Sungguh, kombinasi karakter rendah / atas apa pun dapat disisipkan ke @alpha dan pernyataan itu tidak akan berubah:
sumber
Masuk akal untuk mempertahankan pencarian pengecualian untuk menangani The von Neumann, McCain, DeGuzman, dan Johnson-Smith.
sumber
Dipinjam dan diperbaiki pada jawaban @Richard Sayakanit. Ini menangani banyak kata. Seperti jawabannya, ini tidak menggunakan UDF, hanya fungsi bawaan (
STRING_SPLIT
danSTRING_AGG
) dan ini cukup cepat.STRING_AGG
membutuhkan SQL Server 2017 tetapi Anda selalu dapat menggunakanSTUFF/XML
trik ini. Tidak akan menangani setiap pengecualian tetapi dapat berfungsi dengan baik untuk banyak persyaratan.sumber
Sedikit modifikasi pada jawaban @ Galwegian - yang mengubah mis .
St Elizabeth's
MenjadiSt Elizabeth'S
.Modifikasi ini membuat apostrof-s sebagai huruf kecil di mana s muncul di akhir string yang disediakan atau s diikuti oleh spasi (dan hanya dalam keadaan itu).
Itu berputar:
st elizabeth's
keSt Elizabeth's
o'keefe
keO'Keefe
o'sullivan
keO'Sullivan
Komentar orang lain bahwa solusi yang berbeda lebih disukai untuk masukan non-Inggris tetap berlaku.
sumber
Saya pikir Anda akan menemukan bahwa yang berikut ini lebih efisien:
Pernyataan replace dapat dipotong dan disisipkan langsung ke dalam kueri SQL. Ini sangat buruk, namun dengan mengganti @str dengan kolom yang Anda minati, Anda tidak akan membayar harga untuk kursor implisit seperti yang Anda lakukan dengan udfs yang diposting. Saya menemukan bahwa bahkan menggunakan UDF saya, ini jauh lebih efisien.
Oh dan alih-alih membuat pernyataan ganti dengan tangan, gunakan ini:
Pokoknya itu tergantung jumlah barisnya. Saya berharap Anda dapat melakukan s / \ b ([az]) / uc $ 1 /, tapi oh baiklah kami bekerja dengan alat yang kami miliki.
CATATAN Anda harus menggunakan ini karena Anda harus menggunakannya sebagai .... SELECT dbo.ProperCase (LOWER (kolom)) karena kolom dalam huruf besar. Ini sebenarnya bekerja cukup cepat di tabel saya yang terdiri dari 5.000 entri (bahkan tidak satu detik) bahkan dengan yang lebih rendah.
Menanggapi kebingungan komentar tentang internasionalisasi, saya menyajikan implementasi berikut yang menangani setiap karakter ascii hanya mengandalkan Implementasi SQL Server atas dan bawah. Ingat, variabel yang kita gunakan di sini adalah VARCHAR yang artinya hanya dapat menampung nilai ASCII. Untuk menggunakan huruf internasional lebih lanjut, Anda harus menggunakan NVARCHAR. Logikanya akan serupa tetapi Anda perlu menggunakan UNICODE dan NCHAR sebagai pengganti ASCII AND CHAR dan pernyataan ganti akan jauh lebih besar ....
Pada dasarnya premis metode saya adalah melakukan perdagangan pra-komputasi untuk efisiensi. Implementasi ASCII lengkap adalah sebagai berikut:
sumber
Apakah sudah terlambat untuk kembali dan mendapatkan data tanpa huruf besar?
Basis klien Anda dari von Neumann, McCain, DeGuzman, dan Johnson-Smith mungkin tidak menyukai hasil pemrosesan Anda ...
Juga, saya menduga bahwa ini dimaksudkan sebagai peningkatan data satu kali? Mungkin lebih mudah untuk mengekspor, memfilter / memodifikasi, dan mengimpor ulang nama yang dikoreksi ke db, dan kemudian Anda dapat menggunakan pendekatan non-SQL untuk memperbaiki nama ...
sumber
Berikut adalah variasi lain yang saya temukan di Forum SQLTeam.com @ http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=47718
sumber
Saya tahu masalah detailnya (terutama jika menyangkut data pribadi orang), dan akan sangat menyenangkan untuk memiliki nama yang dikapitalisasi dengan benar, tetapi kerumitan di atas adalah mengapa pragmatis, sadar waktu di antara kita menggunakan yang berikut ini :
SELECT UPPER('Put YoUR O'So oddLy casED McWeird-nAme von rightHERE here')
Menurut pengalaman saya, orang baik-baik saja melihat NAMA MEREKA ... meskipun itu setengah kalimat.
Lihat: Rusia menggunakan pensil!
sumber
Baru saja belajar tentang
InitCap()
.Berikut beberapa contoh kode:
sumber
Ini bekerja di SSMS:
sumber
Jika Anda tahu semua data hanyalah satu kata, inilah solusinya. Pertama perbarui kolom ke semua lebih rendah dan kemudian jalankan yang berikut ini
sumber
Baru-baru ini harus mengatasi ini dan muncul dengan yang berikut setelah tidak ada yang cukup memukul semua yang saya inginkan. Ini akan melakukan seluruh kalimat, kasus untuk penanganan kata khusus. Kami juga memiliki masalah dengan satu karakter 'kata' yang ditangani oleh banyak metode sederhana tetapi tidak dengan metode yang lebih rumit. Variabel pengembalian tunggal, tidak ada loop atau kursor juga.
sumber
Salin dan tempel data Anda ke MS Word dan gunakan konversi teks bawaan menjadi "Capitalize Each Word". Bandingkan dengan data asli Anda untuk mengatasi pengecualian. Tidak dapat melihat jalan keluar secara manual untuk menghindari pengecualian jenis "MacDonald" dan "IBM" tetapi ini adalah bagaimana saya menyelesaikannya FWIW.
sumber