2

SMS メッセージの長さを取得し、メッセージがいくつの部分になるかを教えてくれる SQL のコードがあります。

メッセージ <= 160 文字は一部です。

160 文字を超えるメッセージはマルチパート メッセージになり、各パートには 152 文字が含まれます。誰かがC#で次のようなことを達成するための適切なアルゴリズムを理解するのを手伝ってくれませんか(ラムダ式とlinq式は大歓迎です):

select  
    (case 
        when (LEN(Message)<=160) then 1
        when (LEN(Message)>160 and LEN(Message)<305) then 2
        when (LEN(Message)>304 and LEN(Message)<457) then 3
        when (LEN(Message)>456 and LEN(Message)<609) then 4
        when (LEN(Message)>608 and LEN(Message)<761) then 5
        when (LEN(Message)>760 and LEN(Message)<913) then 6
        when (LEN(Message)>912 and LEN(Message)<1065) then 7
        when (LEN(Message)>1064 and LEN(Message)<1217) then 8
        when (LEN(Message)>1216 and LEN(Message)<1369) then 9
        when (LEN(Message)>1368 and LEN(Message)<1521) then 10
        else 'n'
    end) as [Msg Parts]
from tblAuditLog 
4

3 に答える 3

2
(message.Length <= 160) ? 1 : (message.Length + 151) / 152)

は、メッセージが という名前の文字列であると想定していますmessage。( を介して)切り上げを処理し、+ 151整数除算を使用します。

于 2013-08-21T14:20:01.573 に答える
0

なぜあなたのSQLでそれをしないのですか? それは本当に問題ではありませんが、単純な分割の問題であれば、すべてのケースをリストする必要はありません:

1+ (LEN(Message)-160)/152 AS [Msg Parts]

私はあなたの SQL で除算がどのように処理されるかについてよく知らないので、安全のために (LEN(Message)-160)/152 も切り上げる必要があります。

于 2013-08-21T14:18:31.163 に答える