可能我之前一个帖子太着急没说清楚,具体情况是这样:
仓库上架时有时要计算两个货位之间的距离,这样叉车可以走更短的距离节省工作效率。假设我们有两个货位03-04-09 09-04-07,我现在用下面的这条SQL语句得到一个差值来大概知道这两个货位距离有多远
select abs(convert(int,replace('09-04-05','-','')) - convert(int,replace('09-04-07','-','')))但是今天仓库的人员告诉我货位的编号中有带字母的情况,比如09-0C-08,如果是这样用上面的办法就不适用了,因为有字母的话没法转换成整型来计算差值。
select abs(convert(int,replace('09-04-05','-','')) - convert(int,replace('09-0C-08','-','')))
来这就想问问大家有没有什么好的办法能解决这个问题?希望我这次说清楚了,如果哪有不清楚的大家告我我再补充。

解决方案 »

  1.   

    不懂你的想法,随便说一个,你把字母换成ascii再cast int行吗?
      

  2.   

    我的想法其实挺简单,就是想让两个货位相减一下,得到一个值,我根据这个值的大小来判断这两个货位的远近。能说说具体怎么写吗?
    select abs(convert(int,replace('09-04-05','-','')) - convert(int,replace('09-0C-08','-','')))
    可以在这个基础上改吗?
      

  3.   

    DECLARE @a VARCHAR(20),@b VARCHAR(20)
    SELECT @a='09-04-05',@b='09-0C-08'SELECT CAST( cast(REPLACE(@a,'-','') AS BINARY(6)) AS BIGINT)-
    cast(cast(REPLACE(@b,'-','') AS BINARY(6)) AS BIGINT)--result
    /*-------------------- 
    -983043(所影响的行数为 1 行)*/