如何拆分字符串

时间:2011-07-20 14:43:26

标签: sql-server

如何将以下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 个答案:

答案 0 :(得分:1)

您在此处使用的.ToUpper将替换为T-SQL函数UPPER(),而.Contains可替换为CHARINDEX('X', YourString)之类的内容以返回“ X“ - 如果它大于零,那么它就是字符串中出现的位置。 .Split()函数本身没有等价物,但你可以用CHARINDEX()找到第一个“X”,然后再做另一个找到下一个“X”,然后取出差异,做一个SUBSTRING()来从你较大的输入中获得那个较小的字符串。

这有意义吗?

答案 1 :(得分:0)

答案 2 :(得分: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

答案 3 :(得分: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)<> @分隔器   SET @str_in = @str_in + @separator

     

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

     

WHILE @Counter< = @Occurrences BEGIN SET @Counter = @Counter + 1   插入@strtable VALUES(   SUBSTRING(@ tmpStr,1,CHARINDEX(@分离器,@ tmpStr)-1))

     

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

     

如果DATALENGTH(@tmpStr)= 0 BREAK

     

END RETURN END