Saya memiliki kolom sql yang merupakan string 100 karakter 'Y' atau 'N'. Sebagai contoh:
YYNYNYYNNNYYNY ...
Apa cara termudah untuk menghitung semua simbol 'Y' di setiap baris.
Saya memiliki kolom sql yang merupakan string 100 karakter 'Y' atau 'N'. Sebagai contoh:
YYNYNYYNNNYYNY ...
Apa cara termudah untuk menghitung semua simbol 'Y' di setiap baris.
Jawaban:
Di SQL Server:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
Cuplikan ini berfungsi dalam situasi tertentu di mana Anda memiliki boolean: cuplikan ini menjawab "berapa banyak non-N yang ada?".
SELECT LEN(REPLACE(col, 'N', ''))
Jika, dalam situasi yang berbeda, Anda benar-benar mencoba menghitung kemunculan karakter tertentu (misalnya 'Y') dalam string apa pun, gunakan ini:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
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
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
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 zero
FROM [Table To Search]
LEN(@StringToFind)
.
@StringToFind
tidak akan pernah kosong atau kosong.
Field To Search
akan mendapatkan pembagian dengan nol karena Len(' ')
mengembalikan nol.
Mungkin sesuatu seperti ini ...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
Cara termudah adalah dengan menggunakan fungsi Oracle:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
Ini akan mengembalikan jumlah kemunculan N
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
from Table
coba ini
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
Coba ini. Ini menentukan tidak. kemunculan karakter tunggal serta kejadian sub-string dalam string utama.
SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count
FROM DUAL
connect by rownum <= length(:main_string);
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.
ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130
.
--some data
DECLARE @table TABLE (col varchar(500))
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~'
--string to find
DECLARE @string varchar(100) = 'CHAR(10)'
--select
SELECT
col
, (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks'
FROM @table
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:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
Saya yakin seseorang dapat memikirkan cara yang lebih baik untuk melakukannya!
Anda juga bisa Coba Ini
-- DECLARE field because your table type may be text
DECLARE @mmRxClaim nvarchar(MAX)
-- Getting Value from table
SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362
-- Main String Value
SELECT @mmRxClaim AS MainStringValue
-- Count Multiple Character for this number of space will be number of character
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter
-- Count Single Character for this number of space will be one
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter
Keluaran:
Solusi di bawah ini membantu untuk mengetahui tidak ada karakter yang hadir dari string dengan batasan:
1) menggunakan SELECT LEN (REPLACE (myColumn, 'N', '')), tetapi batasan dan keluaran salah dalam kondisi di bawah ini:
PILIH LEN (REPLACE ('YYNYNYYNNNYYNY', 'N', ''));
--8 --BenarPILIH LEN (REPLACE ('123a123a12', 'a', ''));
--8 --SalahPILIH LEN (REPLACE ('123a123a12', '1', ''));
--7 --Salah
2) Coba dengan solusi di bawah ini untuk hasil yang benar:
pilih dbo.vj_count_char_from_string ('123a123a12', '2');
--2 --Benarpilih dbo.vj_count_char_from_string ('123a123a12', 'a');
--2 --Benar
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: VIKRAM JAIN
-- Create date: 20 MARCH 2019
-- Description: Count char from string
-- =============================================
create FUNCTION vj_count_char_from_string
(
@string nvarchar(500),
@find_char char(1)
)
RETURNS integer
AS
BEGIN
-- Declare the return variable here
DECLARE @total_char int; DECLARE @position INT;
SET @total_char=0; set @position = 1;
-- Add the T-SQL statements to compute the return value here
if LEN(@string)>0
BEGIN
WHILE @position <= LEN(@string) -1
BEGIN
if SUBSTRING(@string, @position, 1) = @find_char
BEGIN
SET @total_char+= 1;
END
SET @position+= 1;
END
END;
-- Return the result of the function
RETURN @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.
SELECT LEN(REPLACE(col, 'N', ''))
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','') IS NULL AND
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.
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', ''))