2011-07-20 197 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