Yang kedua adalah jawaban terbaik di sini. Sisanya bergantung pada situasi aneh dari string yang hanya berisi dua karakter berbeda.
Steve Bennett
5
Sekadar catatan: di T-SQL, Anda harus menggunakan LEN daripada LENGTH.
Lukas
4
@nickf SQL fungsi len memangkas spasi di belakang jadi jika Anda mencari berapa banyak kemunculan spasi dalam string, katakan 'Halo' Anda akan mendapatkan 0. Cara termudah adalah dengan menambahkan karakter trailing ke string sebelumnya dan menyesuaikan len seperti begitu. SELECT LEN (col + '~') - LEN (REPLACE (col, 'Y', '') + '~')
domenicr
3
Jika Anda khawatir tentang spasi tambahan, gunakan fungsi DATALENGTH sebagai gantinya.
StevenWhite
2
@StevenWhite DATALENGTH mengembalikan jumlah byte yang digunakan. Jadi NVARCHAR akan digandakan.
domenicr
18
Ini memberi saya hasil yang akurat setiap kali ...
DECLARE@StringToFind VARCHAR(100)="Text To Count"SELECT(LEN([Field To Search])- LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind),0),1)--protect division from zeroFROM[TableTo Search]
+1 Ini meningkatkan saran kedua oleh @nickf sehingga ini benar-benar akan memberi tahu Anda jumlah
kemunculan
Suntingan @ domenicr telah merusak jawaban ini dan suntingan saya ditolak. Pembagian harus berdasarkan LEN(@StringToFind).
Jamie Kitson
@jamiek maaf saya telah mengirimkan kode yang diperbaiki, tetapi tidak tahu mengapa suntingan Anda ditolak.
domenicr
@domenicr Anda harus kembali ke kode asli, suntingan Anda memperumit kode tanpa tujuan, @StringToFindtidak akan pernah kosong atau kosong.
Jamie Kitson
@Jamieon Saya melihat sebaliknya. Memeriksa pembagian dengan nol adalah prinsip praktik terbaik. Juga, menghitung jumlah ruang Field To Searchakan mendapatkan pembagian dengan nol karena Len(' ')mengembalikan nol.
domenicr
2
Mungkin sesuatu seperti ini ...
SELECT
LEN(REPLACE(ColumnName,'N',''))as NumberOfYs
FROM
SomeTable
Jika Anda ingin menghitung jumlah instance string dengan lebih dari satu karakter, Anda dapat menggunakan solusi sebelumnya dengan regex, atau solusi ini menggunakan STRING_SPLIT, yang saya yakin telah diperkenalkan di SQL Server 2016. Anda juga memerlukan kompatibilitas level 130 dan lebih tinggi.
Jawaban kedua yang diberikan oleh nickf sangat pintar. Namun, ini hanya berfungsi untuk panjang karakter sub-string target 1 dan mengabaikan spasi. Secara khusus, ada dua spasi utama dalam data saya, yang dihapus SQL dengan membantu (saya tidak tahu ini) ketika semua karakter di sisi kanan dihapus. Artinya itu
" John Smith"
menghasilkan 12 menggunakan metode Nickf, sedangkan:
"Joe Bloggs, John Smith"
menghasilkan 10, dan
"Joe Bloggs, John Smith, John Smith"
Menghasilkan 20.
Oleh karena itu saya telah mengubah solusi sedikit menjadi berikut, yang berfungsi untuk saya:
-- DECLARE field because your table type may be textDECLARE@mmRxClaim nvarchar(MAX)-- Getting Value from tableSELECTtop(1)@mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362-- Main String ValueSELECT@mmRxClaim AS MainStringValue
-- Count Multiple Character for this number of space will be number of characterSELECT LEN(@mmRxClaim)- LEN(REPLACE(@mmRxClaim,'GS',' '))AS CountMultipleCharacter
-- Count Single Character for this number of space will be oneSELECT LEN(@mmRxClaim)- LEN(REPLACE(@mmRxClaim,'G',''))AS CountSingleCharacter
-- ================================================SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================-- Author: VIKRAM JAIN-- Create date: 20 MARCH 2019-- Description: Count char from string-- =============================================createFUNCTION vj_count_char_from_string
(@string nvarchar(500),@find_char char(1))
RETURNS integer
ASBEGIN-- Declare the return variable hereDECLARE@total_char int;DECLARE@position INT;SET@total_char=0;set@position =1;-- Add the T-SQL statements to compute the return value hereif LEN(@string)>0BEGINWHILE@position <= LEN(@string)-1BEGINif SUBSTRING(@string,@position,1)=@find_char
BEGINSET@total_char+=1;ENDSET@position+=1;ENDEND;-- Return the result of the functionRETURN@total_char;END
GO
Jika Anda perlu menghitung karakter dalam string dengan lebih dari 2 jenis karakter, Anda dapat menggunakan 'n' -beberapa operator atau regex karakter yang menerima karakter yang Anda butuhkan.
Inilah yang saya gunakan di Oracle SQL untuk melihat apakah seseorang memberikan nomor telepon yang diformat dengan benar:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','')ISNULLAND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0',''))=2
Bagian pertama memeriksa untuk melihat apakah nomor telepon hanya memiliki nomor dan tanda hubung dan bagian kedua memeriksa untuk melihat bahwa nomor telepon hanya memiliki dua tanda hubung.
Apa hubungannya pertanyaan ini dengan nomor telepon? Itu juga meminta solusi T-SQL ...
Ben
-1
misalnya untuk menghitung contoh hitungan karakter (a) di Kolom SQL -> nama adalah nama kolom '' (dan di doblequote kosong saya ganti a dengan nocharecter @ '')
pilih len (name) - len (replace (name, 'a', '')) dari TESTING
pilih len ('YYNYNYYNNNYYNY') - len (ganti ('YYNYNYYNNNYYNY', 'y', ''))
Jawaban:
Di SQL Server:
sumber
Cuplikan ini berfungsi dalam situasi tertentu di mana Anda memiliki boolean: cuplikan ini menjawab "berapa banyak non-N yang ada?".
Jika, dalam situasi yang berbeda, Anda benar-benar mencoba menghitung kemunculan karakter tertentu (misalnya 'Y') dalam string apa pun, gunakan ini:
sumber
Ini memberi saya hasil yang akurat setiap kali ...
Ini ada di bidang Stripes saya ...
Kuning, Kuning, Kuning, Kuning, Kuning, Kuning, Hitam, Kuning, Kuning, Merah, Kuning, Kuning, Kuning, Hitam
sumber
sumber
LEN(@StringToFind)
.@StringToFind
tidak akan pernah kosong atau kosong.Field To Search
akan mendapatkan pembagian dengan nol karenaLen(' ')
mengembalikan nol.Mungkin sesuatu seperti ini ...
sumber
Cara termudah adalah dengan menggunakan fungsi Oracle:
sumber
Ini akan mengembalikan jumlah kemunculan N
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', '')) from Table
sumber
coba ini
sumber
Coba ini. Ini menentukan tidak. kemunculan karakter tunggal serta kejadian sub-string dalam string utama.
sumber
Jika Anda ingin menghitung jumlah instance string dengan lebih dari satu karakter, Anda dapat menggunakan solusi sebelumnya dengan regex, atau solusi ini menggunakan STRING_SPLIT, yang saya yakin telah diperkenalkan di SQL Server 2016. Anda juga memerlukan kompatibilitas level 130 dan lebih tinggi.
.
sumber
Jawaban kedua yang diberikan oleh nickf sangat pintar. Namun, ini hanya berfungsi untuk panjang karakter sub-string target 1 dan mengabaikan spasi. Secara khusus, ada dua spasi utama dalam data saya, yang dihapus SQL dengan membantu (saya tidak tahu ini) ketika semua karakter di sisi kanan dihapus. Artinya itu
" John Smith"
menghasilkan 12 menggunakan metode Nickf, sedangkan:
"Joe Bloggs, John Smith"
menghasilkan 10, dan
"Joe Bloggs, John Smith, John Smith"
Menghasilkan 20.
Oleh karena itu saya telah mengubah solusi sedikit menjadi berikut, yang berfungsi untuk saya:
Saya yakin seseorang dapat memikirkan cara yang lebih baik untuk melakukannya!
sumber
Anda juga bisa Coba Ini
Keluaran:
sumber
Solusi di bawah ini membantu untuk mengetahui tidak ada karakter yang hadir dari string dengan batasan:
2) Coba dengan solusi di bawah ini untuk hasil yang benar:
sumber
Jika Anda perlu menghitung karakter dalam string dengan lebih dari 2 jenis karakter, Anda dapat menggunakan
'n' -
beberapa operator atau regex karakter yang menerima karakter yang Anda butuhkan.sumber
Inilah yang saya gunakan di Oracle SQL untuk melihat apakah seseorang memberikan nomor telepon yang diformat dengan benar:
Bagian pertama memeriksa untuk melihat apakah nomor telepon hanya memiliki nomor dan tanda hubung dan bagian kedua memeriksa untuk melihat bahwa nomor telepon hanya memiliki dua tanda hubung.
sumber
pilih len (name) - len (replace (name, 'a', '')) dari TESTING
pilih len ('YYNYNYYNNNYYNY') - len (ganti ('YYNYNYYNNNYYNY', 'y', ''))
sumber