如何计算SQL Column中字符的实例
我有一个SQLstring是100个'Y'或'N'字符的string。 例如:
YYNYNYYNNNYYNY …
获得每行中所有“Y”符号的最简单方法是什么?
如果MS SQL
SELECT LEN(REPLACE(myColumn, 'N', '')) FROM ...
这段代码适用于具有布尔值的特定情况:它回答“有多less个非N?
SELECT LEN(REPLACE(`col`, 'N', ''))
如果在不同的情况下,您实际上正在计算任何给定string中特定字符(例如“Y”)的出现次数,请使用以下命令:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
这给了我每次准确的结果…
这是在我的条纹领域…黄,黄,黄,黄,黄,黑,黄,黄,红,黄,黄,黄,黑
- 11黄色
- 2黑色
- 1红色
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]
也许这样的事情…
SELECT LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs FROM SomeTable
最简单的方法是使用Oracle函数:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
尝试这个
declare @v varchar(250) = 'test.a,1 ;hheuw-20;' -- LF ; select len(replace(@v,';','11'))-len(@v)
尝试这个。 它决定了否。 单字符出现以及主string中的子string出现。
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);
如果要计算多个单个字符的string实例的数量,可以将以前的解决scheme与正则expression式一起使用,或者此解决scheme使用STRING_SPLIT,我相信它是在SQL Server 2016中引入的。还需要兼容性130级以上。
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
nickf提供的第二个答案是非常聪明的。 但是,它仅适用于目标子string1的字符长度并忽略空格。 具体来说,在我的数据中有两个前导空格,当右侧的所有字符都被删除时,SQL有助于删除(我不知道这一点)。 这意味着
“ 约翰·史密斯”
用Nickf的方法产生了12个,而:
“Joe Bloggs,约翰·史密斯”
生成10,和
“Joe Bloggs,John Smith,John Smith”
生成20。
因此,我已经稍微修改了解决scheme,以下是适用于我的方法:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
我相信有人可以想到一个更好的方法来做到这一点!
你也可以试试这个
-- 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
输出:
例如计算字符(a)在SQL列的计数实例列 – “名称是列名”(在doblequote的是空的,我用nocharecter @'replace一个)
从TESTING中selectlen(name) – len(replace(name,'a',''))
selectlen('YYNYNYYNNNYYNY') – len(replace('YYNYNYYNNNYYNY','y',''))
以下是我在Oracle SQL中用来查看是否有人传递格式正确的电话号码:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
第一部分检查电话号码是否只有数字,连字符和第二部分检查电话号码是否只有两个连字符。