2011-07-20 196 views
0

如何將以下c#轉換爲ms sql?如何拆分字符串

#region determine if Dimension has length & width 
decimal _dimension = 0; 
string[] xy = new string[1]; 
Dimension = Dimension.ToUpper(); 
if (Dimension.Contains('X')) 
{ 
    xy = Dimension.Split('X'); 
    _dimension = (Convert.ToInt32(xy[0]) * Convert.ToInt32(xy[1])/144); 
} 
else 
{ 
     _dimension = Convert.ToDecimal(Dimension); 
} 
#endregion 


DECLARE @_dimension numeric 
select @_dimension = Dimension 

如何提高字符串?

如何在'X'處拆分字符串?

+4

你嘗試過什麼了嗎?你有沒有按預期工作的SQL?否則,這一切對我說,就是你懶得自己嘗試,希望我們爲你弄明白。 –

+0

在你的部分沒有表現出一些努力的問題往往會引起我們社區的負面反應。將來,請張貼您的嘗試,或者至少解釋您爲什麼一開始就卡住了。 –

回答

1

.ToUpper此處使用由T-SQL函數UPPER()替換,並且.Contains可以像CHARINDEX('X', YourString)更換返回「X」的位置 - 如果它大於零,那麼它的發生在字符串出現的位置。 .Split()函數本身沒有相應的功能,但您可以執行CHARINDEX()查找第一個「X」,然後再執行另一個查找下一個「X」,然後取出差異並執行SUBSTRING()以得到更小的來自較大輸入的字符串。

這有道理嗎?

0

即可;

select 
    case when (@_dimension like '%x%') then 
     (cast(left(@_dimension, charindex('X', @_dimension, 1) - 1) as int) 
     * 
     cast(substring(@_dimension, 1 + charindex('X', @_dimension, 1), len(@_dimension)) as int))/144.00 
    else 
     cast(@_dimension as decimal(10, 5)) 
    end 
0

分裂,你需要創建自己的T-SQL函數作爲一個顯示如下:

CREATE FUNCTION SPLIT(@str_in VARCHAR(8000),@separator VARCHAR(4)) RETURNS @strtable TABLE(strval VARCHAR(8000))AS BEGIN

DECLARE @Occurrences INT,@Counter INT,@tmpStr VARCHAR(8000)

SET @Counter = 0 IF SUBSTRING(@ str_in,LEN(@ str_in),1)<> @separator SET @str_in = @str_in + @separator

SET @Occurrences = (DATALENGTH(REPLACE(@ str_in,@分離器,分離器@ + '#')) - DATALENGTH(@str_in))/ DATALENGTH(@separator)SET @tmpStr = @str_in

WHILE @Counter < = @Occurrences BEGIN SET @Counter = @Counter + 1個 INSERT INTO @strtable VALUES( SUBSTRING(@ tmpStr,1,CHARINDEX(@separator ,@ tmpStr)-1))

SET @tmpStr = SUBSTRING(@ tmpStr,CHARINDEX(@ separator,@ tmpStr)+1,8000)

IF DATALENGTH(@tmpStr)= 0 BREAK

END RETURN END