如何将以下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'处拆分字符串?
答案 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