简体   繁体   English

计算SQL中字符的出现

[英]Count occurrences of a character in sql

I am trying to count number of '*' in my string but it gives me wrong count 我正在尝试计算字符串中'*'数量,但计数错误

DECLARE @LongSentence VARCHAR(MAX)
DECLARE @FindSubString VARCHAR(MAX)
SET @LongSentence = 'Pravin Gaonkar: 29 Jan 2013 17:29:22 :  *'
SET @FindSubString = '*'
SELECT LEN(@LongSentence) - LEN(REPLACE(@LongSentence,@FindSubString,''))[Count]

Output 输出量

Count
3

Original - 1 But it gives me 3 count 原始-1但给我3个字

Database SQL SERVER 2008 数据库SQL SERVER 2008

The problem on your query is that replacing the * on your string makes it end with three trailing spaces, and LEN doesn't count those. 您查询中的问题是,替换字符串上的*会使它以三个尾随空格结尾,而LEN不计入这些空格。 So your result is 3. Try using DATALENGTH : 所以您的结果是3。尝试使用DATALENGTH

DECLARE @LongSentence VARCHAR(MAX)
DECLARE @FindSubString VARCHAR(MAX)
SET @LongSentence = 'Pravin Gaonkar: 29 Jan 2013 17:29:22 :  *'
SET @FindSubString = '*'

SELECT DATALENGTH(@LongSentence) - 
       DATALENGTH(REPLACE(@LongSentence,@FindSubString,''))[Count]

This is Oracle query. 这是Oracle查询。 I'm not sure if LEVEL or ROWNUM that can be used instead of LEVEL is available in your version of SQL. 我不确定您的SQL版本中是否可以使用LEVEL或ROWNUM代替LEVEL。 But it may still help you: 但这仍然可以帮助您:

SELECT count(*) cnt FROM
(
 SELECT DISTINCT(Instr('Pravin Gaonkar: 29 Jan 2013 17:29:22 :  *', '*', LEVEL)) char_pos
   FROM dual
 CONNECT BY LEVEL <= Length('Pravin Gaonkar: 29 Jan 2013 17:29:22 :  *') 
)
WHERE char_pos > 0
/

SQL>

CNT
---
  1

SQL Server 2008 - Querying a Hierarchical Table Using Hierarchy Methods (GetRoot, and GetLevel...) - equivavelt to Oracle hierarchy used in my example: http://msdn.microsoft.com/en-us/library/3b4f7dae-65b5-4d8d-8641-87aba9aa692d(v=sql.100) SQL Server 2008-使用层次结构方法(GetRoot和GetLevel ...)查询层次结构表-与我的示例中使用的Oracle层次结构等效: http : //msdn.microsoft.com/zh-cn/library/3b4f7dae-65b5- 4d8d-8641-87aba9aa692d(v = sql.100)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM