0

文字列の数を数えようとし'*'ていますが、間違った数になります

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]

出力

Count
3

オリジナル - 1 しかし、それは私に 3 カウントを与えます

データベース SQL サーバー 2008

4

2 に答える 2

5

クエリの問題は*、文字列の を置き換えると、末尾の 3 つのスペースで終わり、LENそれらがカウントされないことです。したがって、結果は 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]
于 2013-01-29T12:59:16.907 に答える
-2

これは Oracle クエリです。お使いのバージョンの SQL で、LEVEL の代わりに使用できる LEVEL または ROWNUM が使用できるかどうかはわかりません。しかし、それはまだあなたを助けるかもしれません:

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 - 階層メソッド (GetRoot、および GetLevel など) を使用した階層テーブルのクエリ - 私の例で使用されている Oracle 階層と同等: http://msdn.microsoft.com/en-us/library/3b4f7dae-65b5- 4d8d-8641-87aba9aa692d(v=sql.100)

于 2013-01-29T13:30:59.437 に答える